首页 文章

additionalSafeAreaInsets的奇怪行为

提问于
浏览
3

我对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 回答

  • 0

    问题是 viewDidLoad() 中视图的界限是错误的 .

    您应该在 viewWillAppear 中执行此操作,您将在那里获得正确的值 .

    至于为什么值是错误的,additionalSafeAreaInsets表示你希望视图减少安全区域的程度,所以你可能想要这样:

    self.additionalSafeAreaInsets = UIEdgeInsets(top: 0, left: SideMenuController.preferences.basic.menuWidth, bottom: 0, right: 0)

相关问题