如何在 iOS 7/8 处禁用单个视图的横向
How to disable landscape orientation on a single view at iOS 7/8
我在常规目标设置中为我的应用程序启用了横向:
一切正常 - 该应用程序可用于所有选定的方向...
现在我想禁用横向模式只有一个视图。
我在特定的视图控制器上尝试了以下操作:
- (BOOL)shouldAutorotate
{
return NO;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
很遗憾没有成功...
编辑:
我的应用程序的结构是:
UITabBarController
UINavigationController
UITableViewController
UIViewController
你把上面的代码放在视图或 NavigationController 的 ViewController 中了吗?你需要把它放在导航控制器中,否则导航控制器会旋转,导致视图也旋转。子类 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;
}
我在常规目标设置中为我的应用程序启用了横向:
一切正常 - 该应用程序可用于所有选定的方向...
现在我想禁用横向模式只有一个视图。
我在特定的视图控制器上尝试了以下操作:
- (BOOL)shouldAutorotate
{
return NO;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
很遗憾没有成功...
编辑:
我的应用程序的结构是:
UITabBarController
UINavigationController
UITableViewController
UIViewController
你把上面的代码放在视图或 NavigationController 的 ViewController 中了吗?你需要把它放在导航控制器中,否则导航控制器会旋转,导致视图也旋转。子类 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;
}