IOS6.0,Navigation基础应用程序中的SupportedInterfaceOrientations

时间:2013-03-06 09:15:09

标签: ios

我有一个导航基础应用程序,最近从Xcode 3.2移到了4.6。

由于在iOS 6中不推荐使用ShouldAutorotateToInterfaceOrientation,我只使用它来强制特定视图到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”,并且在设备旋转时不会旋转。(这就是我想要的)

如何使导入导航的视图正常工作?

2 个答案:

答案 0 :(得分:1)

如果您在应用程序中使用UINavigationcontroller并且需要具有不同的界面方向,那么它可能会破坏应用程序中的界面方向,解决方案是实现自定义UINavigationController并实现界面该自定义UINavigationController类中的方向方法,这将使您的viewControllers根据您设置的方向旋转,因为您的控制器是从UINavigationController推送的。

用于在UINavigationController上推送viewController,你应该这样做

[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];
}

答案 1 :(得分:0)

将以下代码放入appDelegate方法:

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

}

希望这会对你有所帮助。

一切顺利!!!