iPhone X 尺寸图镇楼
我们都知道,iOS 11 引入了Safe Area这个概念。在xib或者storyboard上添加subview,都是会添加在Safe Area上的。例如:在vc上添加一个view,上下左右约束分别为0,在iPhone X 和 iphone 6上展示不一样,如下图。纯代码创建的时候不会出现这个问题,因为subview是直接添加在self.view上面。
很明显,在iPhone X上底下会有一个34pt高度的留白区。分别打印一下两个机型的self.view.safeAreaInsets。
那么假使现在,我希望在iPhone X机型上,底下不要留白。页面展示效果跟iphone 6一样。然而safeAreaInsets是只读属性,无法通过修改值达到目的。
第一种方法,Align Bottom to:Safe Area 的值改为-34。但是如果后期出了新的机型,那么这个值就不再适配,因为不推荐。
第二种方法,在bottom的约束上,直接以superView为参照,如下图。
另外补充几点:
-
additionalSafeAreaInsets:controller可以扩展安全区域,如果我们设置self.additionalSafeAreaInsets = UIEdgeInsetsMake(20, 0, 0, 20);意思就是在原有的safeAreaInsets值中增加对应的边距值。如果原来的是{10, 0, 0, 10}, 则最后得出的边距是{30, 0, 0, 30}。 -
(void)viewSafeAreaInsetsDidChange:当视图的安全区域发生变更时会触发该方法,可以通过该方法来处理安全区域变更时的UI布局。 -
insetsLayoutMarginsFromSafeArea:默认值是YES,如果设置为NO,所有的视图布局将会忽略safeAreaInsets这个属性了。这个只对纯代码布局视图有效,如果是xib或者storyboard布局的话不起作用。一般用于tableView居多。











网友评论