【发布时间】:2016-03-31 08:49:42
【问题描述】:
这或多或少是我Main.storyboard 的情况:
我有一个根 UITabBarController 有 5 种可能的选择。然后,我希望一些UIViewControllers 可以旋转到横向,而我还希望其他一些UIViewControllers 只有横向模式。所以我写了这个file.swift:
class CustomNavigationController: UINavigationController, UINavigationControllerDelegate {
override func shouldAutorotate() -> Bool {
if (self.topViewController?.isKindOfClass(HomeViewController) != nil) {return false}
else if (self.topViewController?.isKindOfClass(ServicesViewController) != nil) {return false}
else if (self.topViewController?.isKindOfClass(PhotoGalleryViewController) != nil) {return false}
else if (self.topViewController?.isKindOfClass(SelectMapViewController) != nil) {return false}
else if (self.topViewController?.isKindOfClass(MapViewController) != nil) {return false}
else {return true}
}
}
class CustomTabBarController: UITabBarController, UITabBarControllerDelegate {
override func shouldAutorotate() -> Bool {
return (self.selectedViewController as! UINavigationController).shouldAutorotate()
}
}
我已将
CustomNavigationController 分配给所有UINavigationControllers,而我已将CustomTabBarController 分配给UITabBarController。
结果是没有视图控制器不旋转。这是因为我给他们分配了同一个班级吗?我应该为我拥有的每个UINavigationController 创建一个自定义导航控制器类吗?
更新
我发现的一个部分解决方案,即使它有点复杂,如下所示。我已经像这样修改了以前的文件:
class CustomNavigationController: UINavigationController, UINavigationControllerDelegate {
override func shouldAutorotate() -> Bool {
return (self.topViewController?.shouldAutorotate())!
}
}
类 CustomTabBarController: UITabBarController, UITabBarControllerDelegate { 覆盖 func shouldAutorotate() -> Bool { return (self.selectedViewController as!UINavigationController).shouldAutorotate() } }
然后,在允许旋转的视图控制器中,我只需:
override func shouldAutorotate() -> Bool {
return true
}
在视图控制器中不允许旋转我有:
override func shouldAutorotate() -> Bool {
return false
}
override func viewWillAppear(animated: Bool) {
let value = UIInterfaceOrientation.Portrait.rawValue
UIDevice.currentDevice().setValue(value, forKey: "orientation")
}
总之有一点小问题,因为将模式设置为纵向的动画不正确,这意味着屏幕的宽度没有调整。如果我从横向视图控制器转到仅纵向视图控制器,则视图控制器框架不正确。我明白了
而不是这个:
【问题讨论】:
标签: xcode swift uinavigationcontroller uitabbarcontroller autorotate