【发布时间】:2019-01-10 10:22:10
【问题描述】:
当在viewController 上按下按钮时,我目前正在覆盖UIView。我把它放在其他屏幕设备上,当我在iPhone X + 设备上运行时。它的定位不好。为了使其定位良好,我需要在其当前的top safeAreaInsets 中减去 40 个点。最初的20分是为了应付状态栏。当我这样做时,它可以工作,然后它就不能在其他没有缺口的 iPhone 上工作。我在这里做错了什么。这是我的代码
func contentFrame(extraTopOffset pOffset: CGFloat = 0) -> CGRect {
var theFrame = self.view.bounds
if let navBar = self.navigationBar {
let topOffset = navBar.frame.origin.y + navBar.frame.size.height
theFrame.size.height -= topOffset
theFrame.origin.y += topOffset
}
if #available(iOS 11.0, *) {
let safeInsets = UIApplication.shared.delegate!.window!?.safeAreaInsets
let topOffset = safeInsets!.top - (20 + pOffset)
theFrame.origin.y += topOffset
theFrame.size.height -= topOffset + safeInsets!.bottom
}
return theFrame
}
我在另一个 viewController 中显示覆盖的地方,我覆盖了该方法
override func showOverlay() {
self.overlayView.frame = self.contentFrame()
self.view.addSubview(self.overlayView)
}
【问题讨论】:
-
使用
self.view.safeAreaInsets代替UIApplication.shared.delegate!.window!?.safeAreaInsets会有什么不同吗? -
@D.Mika 它没有
-
是否可以使用AutoLayout约束而不是直接设置框架?
标签: ios swift autolayout safearealayoutguide