利用目标C中的安全区域

时间:2017-11-07 22:45:15

标签: ios objective-c ios11

我正在努力迁移我的应用,以便我可以在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

但那并没有做任何事情。

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

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

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

或者您可以使用约束而不是直接设置框架,让自动布局为您处理所有内容。