【发布时间】:2018-12-09 13:23:39
【问题描述】:
我是 iOS 开发的新手,在设置 AdditionalSafeAreaInsets 变量时,我在 UIViewController 中遇到了意想不到的奇怪行为。
我设置安全区域约束的原因是我使用这个library 在我的应用程序上实现侧边菜单。由于库通过使用 UIViewController 实现侧边菜单,即全屏的大小,使用屏幕宽度将其完全向左偏移,然后将偏移量减少预定义的值以显示菜单。在纵向模式下,我设置了一个较小的附加左侧安全区域值(例如 75,因为宽度更小),而在横向模式下,我必须使用更大的值来描述安全区域(例如 364)。
发生的情况是,最初在纵向时一切正常,然后在旋转到横向后,一切正常。但是当从横向旋转到纵向时,使用较大的横向值,并且由于值不正确,所有内容都向右偏移。原因似乎是我只能增加 AdditionalSafeAreaInsets 变量值,而不能减少它? 这是 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
}
}
【问题讨论】:
-
对我来说,解决这个问题的方法是使用普通的旧布局边距插图而不是 safeAreaInsets。这实际上对我来说效果更好,因为它向后兼容旧的 iOS 版本。也许这条评论可以让那些在这个问题上苦苦挣扎的人有所了解。虽然,这并没有回答关于附加安全区域插入的原始问题,所以我暂时保留这个问题。