使用SnapKit布局时设置safeAreaInsets.top仍无法将视图放入安全区怎么办
错误原因
- 你写的
make.top.equalTo(view.safeAreaInsets.top)逻辑错误:view.safeAreaInsets.top是数值类型,这条约束的实际效果是将红色视图的顶部与父视图的顶部对齐,偏移量为view.safeAreaInsets.top的数值,而非锚定到安全区的顶部边界。 viewDidLoad阶段视图尚未完成布局计算,此时获取的safeAreaInsets值为0,最终表现就是红色视图顶部贴到了屏幕最顶端,没有落到安全区内。
修复方案
直接将红色视图的顶部约束锚定到父视图的安全区布局引导的顶部即可,修改后的约束代码如下:
redView.snp.makeConstraints{ make in make.top.equalTo(view.safeAreaLayoutGuide.snp.top) make.width.height.equalTo(100) make.left.equalToSuperview() }
补充说明
如果你需要基于safeAreaInsets做自定义偏移计算,需要把约束更新逻辑放到viewDidLayoutSubviews生命周期方法中执行,此时safeAreaInsets已经完成计算可以拿到正确值,不过直接使用safeAreaLayoutGuide的写法更简洁稳定,无需关心生命周期时机问题。
内容的提问来源于stack exchange,提问作者trianglejerry00
相关产品推荐
相关产品推荐

