我对iOS开发很陌生,在设置additionalSafeAreaInsets变量时,我在UIViewController中遇到了意外和奇怪的行为 .
我设置安全区域约束的原因是我使用此library在我的应用程序上实现侧面菜单 . 由于库通过使用UIViewController来实现侧面菜单,即整个屏幕的大小,使用屏幕宽度将其完全偏移到左侧,然后将偏移量减少预定义值以显示菜单 . 在纵向模式下,我设置了一个较小的附加左安全区域值(例如75,因为宽度较小),并且在横向中我必须使用较大的值来描述安全区域(例如364) .
会发生什么,最初在画像中一切正常,然后旋转到风景后,一切都很好 . 但是当从横向旋转到纵向时,会使用较大的横向值,并且由于值不正确,所有内容都会向右偏移 . 原因似乎是我只能增加additionalSafeAreaInsets变量值,但不能减少它吗?这是UIKit的预期行为以及如何避免它或重置additionalSafeAreaInsets?
下面是我的UIViewController中的一些相关代码
@available(iOS 11.0, *)
func updateLeftInset(size: CGSize) {
let leftInset = size.width - SideMenuController.preferences.basic.menuWidth
self.additionalSafeAreaInsets = UIEdgeInsets(top: 0, left: leftInset, bottom: 0, right: 0)
}
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
print("viewWillTransition")
if #available(iOS 11.0, *) {
updateLeftInset(size: size)
} else {
// Fallback on earlier versions
}
}
override func viewDidLoad() {
if #available(iOS 11.0, *) {
updateLeftInset(size: view.bounds.size)
} else {
// Fallback on earlier versions
}
}
1 回答
问题是
viewDidLoad()
中视图的界限是错误的 .您应该在
viewWillAppear
中执行此操作,您将在那里获得正确的值 .至于为什么值是错误的,additionalSafeAreaInsets表示你希望视图减少安全区域的程度,所以你可能想要这样:
self.additionalSafeAreaInsets = UIEdgeInsets(top: 0, left: SideMenuController.preferences.basic.menuWidth, bottom: 0, right: 0)