利用 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
才能在更改时收到通知。
请注意 safeAreaInsetsDidChange
是 UIView
的方法,而不是 UIViewController
,因此您需要创建并使用 UIView
的子类来覆盖该方法.像这样覆盖它可能就足够了:
override func safeAreaInsetsDidChange() {
super.safeAreaInsetsDidChange()
setNeedsLayout()
}
然后可以在layoutSubviews
中设置子视图的框架。
或者您可以只使用约束而不是直接设置框架,让自动布局为您处理这一切。
我正在努力迁移我的应用程序,这样我就可以在 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
才能在更改时收到通知。
请注意 safeAreaInsetsDidChange
是 UIView
的方法,而不是 UIViewController
,因此您需要创建并使用 UIView
的子类来覆盖该方法.像这样覆盖它可能就足够了:
override func safeAreaInsetsDidChange() {
super.safeAreaInsetsDidChange()
setNeedsLayout()
}
然后可以在layoutSubviews
中设置子视图的框架。
或者您可以只使用约束而不是直接设置框架,让自动布局为您处理这一切。