在iOS开发中,最常见的屏幕旋转方案:
-
取消Device Orientation的选择按钮
取消选中
-
在appDelegate中实现全部允许旋转:
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
return .allButUpsideDown
}
- TabbarController中实现:
override var shouldAutorotate: Bool {
return self.selectedViewController!.shouldAutorotate
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return self.selectedViewController!.supportedInterfaceOrientations
}
- 自定义NavigationController中实现:
这里注意区分visibleViewController 与topViewController,
visibleViewController 是当前显示的控制器
topViewController 是导航栈的栈控制器
visibleViewController跟导航栈没有关系,只是当前显示的控制器,也就是说任意一个导航的visibleViewController所返回的值应该是一样的,
topViewController 是某个导航栈的栈顶视图,和Nav控制器相关
换句话说如果在仅有一个导航栈上,visibleViewController和topViewController应该是没有区别得,
但是假如是present之后的Controller, visibleViewController和topViewController就有区别了
比如在navA.a .present->navB.b
- navA.topViewController == a;
- navA.visibleViewController == b;
- navB.topViewController == b;
- navB.visibleViewController == b;
但是假如说navA.a .present->Controllerb
- navA.topViewController == a,
- navA.visibleViewController == b,
- b.nav == nil;
所以这里建议使用topViewController
override var shouldAutorotate: Bool {
return self.topViewController!.shouldAutorotate
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
if self.topViewController != nil {
return self.topViewController!.supportedInterfaceOrientations
} else {
return .portrait
}
}
- 在BaseViewController中实现:
override var shouldAutorotate: Bool {
return false
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .portrait
}
6.在需要实现横竖屏旋转(比如播放器),在controller中override这两个方法
override var shouldAutorotate: Bool {
if playerView.isHidden == true {
return false
} else {
return !isLock
}
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
if isLock == true {
return .landscapeRight
} else {
return UIInterfaceOrientationMask(rawValue: UIInterfaceOrientationMask.portrait.rawValue | UIInterfaceOrientationMask.landscapeRight.rawValue | UIInterfaceOrientationMask.landscapeLeft.rawValue)
}
}
网友评论