1

我有一个导航基础应用程序,它最近从 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”,并且在设备旋转时不会旋转。(这就是我想要的)

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

4

2 回答 2

1

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

推动 viewControllerUINavigationController你应该这样做

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

我在使用 navigationController 时遇到了类似的问题,我的视图没有正确旋转,所以我实现了这样的自navigationController定义

自定义导航控制器.h

@interface CustomNavigationController : UINavigationController
@end

自定义导航控制器.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 回答