1

最近Xcode3.2から4.6に移動したナビゲーションベースアプリケーションがあります。

shouldAutorotateToInterfaceOrientationはiOS6で非推奨になり、特定のビューをUIDeviceOrientationLandscapeLeftのみに強制し、他のビューをUIDeviceOrientationPortraitのみに強制するために使用したため、対応するViewControllerに次のコードを追加します。

-(BOOL)shouldAutorotate{
    NSLog(@"shouldAutorotate");
        return YES;
}
-(NSInteger)supportedInterfaceOrientations{
    NSLog(@"UIInterfaceOrientationMaskPortrait");
        return UIInterfaceOrientationMaskPortrait;
}

-(BOOL)shouldAutorotate{
    NSLog(@"shouldAutorotate");
        return YES;
}
-(NSInteger)supportedInterfaceOrientations{
    NSLog(@"UIInterfaceOrientationMaskLandscapeLeft");
        return UIInterfaceOrientationMaskLandscapeLeft;
}

次に、ViewControllerがナビゲーションのみのログ「UIInterfaceOrientationMaskPortrait」にプッシュされ、デバイスが回転するとビューが回転します。(これは私が望むものではありません)[self presentModalViewController:]によって表示されるViewControllerは、「shouldAutorotate」と「UIInterfaceOrientationMaskLandscapeLeft」の両方をログに記録でき、デバイスが回転しても回転しません(これが私が望むものです)

ナビゲーションにプッシュされたビューを正しく機能させるにはどうすればよいですか?

4

2 に答える 2

1

アプリケーションで使用UINavigationcontrollerしていて、異なるインターフェイスの向きが必要な場合は、アプリケーションのインターフェイスの向きを台無しにする可能性があります。解決策は、カスタムUINavigationControllerを実装し、そのカスタムクラス内にインターフェイスの向きのメソッドを実装するUINavigationControllerことです。これにより、viewControllerが回転します。コントローラがからプッシュされるため、設定した方向に応じてUINavigationController

viewControllerをプッシュするには、次のUINavigationControllerようにする必要があります

[self.navigationController pushViewController:yourViewController animated:YES];

NavigationControllerを使用したときに同様の問題が発生しました。ビューが適切に回転していなかったため、navigationControllerこのようなカスタムを実装しました

CustomNavigationController.h

@interface CustomNavigationController : UINavigationController
@end

CustomNavigationController.m

@implementation CustomNavigationController

//overriding shouldRotate method for working in navController
-(BOOL)shouldAutorotate
{  
  return   [self.visibleViewController shouldAutorotate];   
}

-(NSUInteger)supportedInterfaceOrientations
{
   return [self.topViewController supportedInterfaceOrientations];
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
   return [self.topViewController preferredInterfaceOrientationForPresentation];
}
于 2013-03-06T09:22:26.243 に答える
0

以下のコードをappDelegateメソッドに配置します。

- (NSUInteger) application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
return UIInterfaceOrientationMaskPortrait;

}

これがお役に立てば幸いです。

ではごきげんよう !!!

于 2013-03-06T09:17:25.203 に答える