我支持iOS应用中的所有方向和自动旋转,但我希望某些视图控制器不能在横向上显示他们的视图。我在这样的视图控制器中实现shouldAutorotate
方法:
- (BOOL)shouldAutorotate
{
return NO;
}
它肯定会阻止视图在加载或以纵向显示时旋转到横向。但是当加载视图控制器或看起来该设备已经处于横向状态时,视图将以横向显示。
无论设备的方向如何,我如何从头开始加载/使视图以纵向显示?
由于
答案 0 :(得分:1)
您可以使用方法supportedInterfaceOrientations()
来指定特定视图控制器的可用方向。
但是,当您将视图控制器嵌入导航堆栈时,系统会在导航控制器上调用shouldAutorotate
和supportedInterfaceOrientations
,并忽略从视图控制器返回的值。
我使用UINavigationController
的子类来从顶视图控制器获取支持的方向。您还可以为UITabBarViewController
class SingleOrientationNavigationController: UINavigationController {
//MARK : Orientation
override func shouldAutorotate() -> Bool {
if let topVC = topViewController {
return topVC.shouldAutorotate()
}
return false
}
override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
if let topVC = topViewController {
return topVC.supportedInterfaceOrientations()
}
return UIInterfaceOrientationMask.Portrait
}
// MARK : Status bar
override func preferredStatusBarStyle() -> UIStatusBarStyle {
if let topVC = topViewController {
return topVC.preferredStatusBarStyle()
}
return .Default
}
}
请注意,如果推送的视图控制器的旋转选项少于前一个,则可能会出现一些问题。
让我们考虑两个视图控制器:
A : only portrait
B : all orientation
如果从A到B执行推动,那么它就可以了,B可以根据需要旋转,即使B在流行时处于横向状态,您也会回到A中的纵向
但是如果在B处于横向状态时从B到A执行推送,则A也将显示为横向!一种解决方法是使用模态视图控制器,而不是在这种特殊情况下推送它。
答案 1 :(得分:0)