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
居多。