利用 Objective C 中的安全区域

Make use of safe areas in Objective C

我正在努力迁移我的应用程序,这样我就可以在 iPhoneX 上使用它而无需缩放。目前我使用以下代码布局子视图:

CGRect frame = self.view.bounds;
frame.size.height = 295;
frame.origin.y = 20;

在添加缺口之前,这一切正常。我没有看到一个明确的方法来找出 frame.origin.y 应该设置什么,而不仅仅是硬编码。我想避免这种情况。

我想做的是这个 - frame.origin.y = 20 + self.view.safeAreaInserts.top

但这没有任何作用。

谢谢!

可能 safeAreaInsets 在您的代码运行后被更改(例如,如果您尝试在 viewDidLoad 中执行布局)。您需要覆盖 safeAreaInsetsDidChange 才能在更改时收到通知。

请注意 safeAreaInsetsDidChangeUIView 的方法,而不是 UIViewController,因此您需要创建并使用 UIView 的子类来覆盖该方法.像这样覆盖它可能就足够了:

override func safeAreaInsetsDidChange() {
    super.safeAreaInsetsDidChange()
    setNeedsLayout()
}

然后可以在layoutSubviews中设置子视图的框架。

或者您可以只使用约束而不是直接设置框架,让自动布局为您处理这一切。