如何在 iOS 7/8 的单个视图上禁用横向
Posted
技术标签:
【中文标题】如何在 iOS 7/8 的单个视图上禁用横向【英文标题】:How to disable landscape orientation on a single view at iOS 7/8 【发布时间】:2015-03-14 18:16:43 【问题描述】:我在一般目标设置下为我的应用启用了横向:
一切正常 - 该应用程序可用于所有选定方向...
现在我想禁用只有一个视图上的横向模式。
我在特定的视图控制器上尝试了以下操作:
- (BOOL)shouldAutorotate
return NO;
- (NSUInteger)supportedInterfaceOrientations
return UIInterfaceOrientationMaskPortrait;
可惜没有成功……
编辑:
我的应用的结构是:
UITabBarController
UINavigationController
UITableViewController
UIViewController
【问题讨论】:
这个视图是否嵌入在导航控制器中? @JoshGafni 是的,它是一个子视图... 【参考方案1】:上面的代码是放在视图的ViewController还是NavigationController?你需要把它放在导航控制器中,否则导航控制器会旋转,导致视图也旋转。子类 UINavigationController 并覆盖 shouldAutoRotate:
- (BOOL)shouldAutorotate
id currentViewController = self.topViewController;
if ([currentViewController isKindOfClass:[ViewController class]])
return NO;
return YES;
因此,只有当显示的视图是您不想旋转的视图时,导航控制器才会旋转。
编辑
UITabBarController 内部:
- (BOOL)shouldAutorotate
if([self.selectedViewController isKindOfClass:[UINavigationController class]])
UINavigationController *navigationController = (UINavigationController *) self.selectedViewController;
id currentViewController = navigationController.topViewController;
if ([currentViewController isKindOfClass:[ViewController class]])
return NO;
return YES;
【讨论】:
感谢您的快速回复!将您的代码添加到 NavigationController - 但什么也没发生...我将我的应用程序结构添加到问题中 - 也许有问题? 我在 shouldAutorotate 函数中添加了一个断点,如果我打开 tableview(在选项卡中),它不会被调用... 其实坚持一下。你到底想发生什么。您是否希望选项卡旋转,但其中的视图不旋转?你想让导航栏也旋转吗? 我有不同的选项卡,里面是一些表格视图,表格视图下方是普通视图控制器......“普通”应用程序应该旋转,但表格视图下方的一些“子视图”应该不是…… 但我想当您查看“普通视图控制器”时,选项卡和导航栏仍然在屏幕上可见。如果“普通视图控制器”在屏幕上,您是否希望它们也不要旋转?以上是关于如何在 iOS 7/8 的单个视图上禁用横向的主要内容,如果未能解决你的问题,请参考以下文章