我有一个包含多个视图的导航控制器。大多数视图都是纵向的,因此我将以下代码放在导航视图控制器中将其锁定为纵向视图
override func shouldAutorotate() -> Bool {
return false
}
override func supportedInterfaceOrientations() -> Int {
return UIInterfaceOrientation.Portrait.toRaw()
}
这很好用,并以纵向锁定我的所有视图。但是,这是一个只需要在Landscape中的视图。如果我使用上面的代码,它会将我的横向视图锁定为纵向模式,从而切断大部分视图。
任何人都可以帮我解决在横向视图控制器中使用的内容,以仅在横向上锁定此特定视图。
我正在使用它,但它不起作用。
override func supportedInterfaceOrientations() -> Int {
return Int(UIInterfaceOrientationMask.Landscape.toRaw())
}
override func shouldAutorotate() -> Bool{
// This method is the same for all the three custom ViewController
return true
}
答案 0 :(得分:0)
对于小型应用,我通常使用的解决方案是让导航控制器询问视图本身的旋转偏好:
override func supportedInterfaceOrientations() -> Int {
return visibleViewController.supportedInterfaceOrientations()
}
override func shouldAutorotate() -> Bool {
return visibleViewController.shouldAutorotate()
}
然后,在每个视图控制器中,您可以覆盖shouldAutorotate和supportedInterfaceOrientations,为每个控制器提供所需的行为。
另外一个技巧是,为了确保您的视图可以旋转回所需的旋转,您可以使用它来有条件地允许旋转回到肖像:
override func shouldAutorotate() -> Bool {
return !UIInterfaceOrientationIsPortrait(self.interfaceOrientation)
}