iOS整体竖屏,个别页面横屏遇到的坑及解决办法

iOS竖屏状态下present一个横屏的viewController(继承BaseViewController)出现bug,每次app第一次启动后,会出现如图1中的现象,本应该横屏全屏的界面,结果成了竖屏只有上半边的情况,下半边全黑,再次进入这个页面就不会再出现。

图1

这时我在【General】【Device Orientation】中只选择了【Portrait】

在需要横屏的ViewController中添加代码:

1
2
3
4
5
6
7
8
9
10
11
override var shouldAutorotate: Bool {
return false
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .landscapeRight
}
override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
return .landscapeRight
}

解决办法

在【General】【Device Orientation】中选择了【Portrait】和【Landscape Right】,只在AppDelegate中设置

1
2
3
4
5
6
7
8
9
var allowRotation: Bool = false //是否允许转向
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
if self.allowRotation {
return .landscapeRight
} else {
return .portrait
}
}

然后在需要设置横屏的Controller 的 viewDidLoad 函数中设置

1
2
3
if let appDelegate = UIApplication.shared.delegate as? AppDelegate {
appDelegate.allowRotation = true
}

在点击返回按钮时重新设置上面的值

1
2
3
if let appDelegate = UIApplication.shared.delegate as? AppDelegate {
appDelegate.allowRotation = false
}