我是iOS开发的新手,在设置AdditionalSafeAreaInsets变量时,我在UIViewController中遇到了意外的奇怪行为。
我之所以设置安全区域约束,是因为我使用此library在我的应用上实现了侧面菜单。当库通过使用UIViewController(即全屏的大小)实现“侧边菜单”时,使用屏幕的宽度将其完全向左偏移,然后将偏移量减小预定义的值以显示菜单。在纵向模式下,我设置了一个较小的附加左安全区域值(例如,宽度较小时为75),在横向模式下,我必须使用较大的值来描述安全区域(例如364)。
发生的事情是,最初在人像中一切正常,然后旋转到风景后,一切也正常。但是,当从横向旋转到纵向时,将使用较大的横向值,并且由于值不正确,所有内容都会向右偏移。原因似乎是我只能增加额外的SafeAreaInsets变量值,而不能减少它? 这是UIKit的预期行为,以及如何避免或重置额外的SafeAreaInsets?
下面是我的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
}
}
答案 0 :(得分:0)
问题是获取viewDidLoad()
中的视图边界是错误的。
您应该在viewWillAppear
中执行此操作,在那里您将获得正确的值。
关于为什么值错误的原因,额外的SafeAreaInsets表示您希望视图减少安全区域的数量,因此您可能希望这样做:
self.additionalSafeAreaInsets = UIEdgeInsets(top: 0, left: SideMenuController.preferences.basic.menuWidth, bottom: 0, right: 0)