我正在努力迁移我的应用,以便我可以在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
但那并没有做任何事情。
谢谢!
答案 0 :(得分:1)
代码运行后可能会更改safeAreaInsets
(例如,如果您尝试在viewDidLoad
中执行布局)。您需要覆盖safeAreaInsetsDidChange
才能在更改时收到通知。
请注意,safeAreaInsetsDidChange
是UIView
的方法,而非UIViewController
,因此您需要创建并使用UIView
的子类来覆盖该方法。像这样覆盖它可能就足够了:
override func safeAreaInsetsDidChange() {
super.safeAreaInsetsDidChange()
setNeedsLayout()
}
然后您可以在layoutSubviews
中设置子视图的框架。
或者您可以使用约束而不是直接设置框架,让自动布局为您处理所有内容。