旋转设备后 safeAreaLayoutGuide 未更新

Posted

技术标签:

【中文标题】旋转设备后 safeAreaLayoutGuide 未更新【英文标题】:safeAreaLayoutGuide not updated after rotating the device 【发布时间】:2020-09-24 07:12:17 【问题描述】:

我展示了一个 UIViewController out,它使用自动布局来设置视图控制器视图内子视图的约束。所有的约束都保存在代码中,没有 故事板或 xib。

我在代码里面加上safeAreaLayoutGuide,如下:

NSLayoutConstraint *const containerViewTopConstraint = [self.containerView.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor];

问题是在我从纵向旋转到横向之后,view.safeAreaLayoutGuide 没有得到更新。这仍然是肖像中的旧 safeAreaLayoutGuide。想知道我是否错过了什么? 谢谢!

【问题讨论】:

您需要提供更多信息。你能用一个子视图来展示这个吗?您能否以屏幕截图显示您未预料到的情况? @DonMag,感谢您的回复,没想到的是当我旋转到横向时,它会在顶部添加额外的边距,但左右两侧没有边距,然后是我的看法将与 iphone X 的缺口重叠。 【参考方案1】:

听起来您误解了“顶部”的概念?

布局指南不会“随设备旋转”。当您旋转手机时,self.view.safeAreaLayoutGuide.topAnchor 不再是带有凹槽的边缘。

在这些图像中,青色标签的所有 4 个边缘(顶部/底部/前导/尾随)都被限制在视图的 safeAreaLayoutGuide

在这些图像中,只有 顶部 边缘被约束到视图的 safeAreaLayoutGuide - 前导/尾随/底部被约束到视图各自的锚点:

【讨论】:

【参考方案2】:

原来我找到了原因,很傻,我的队友写错了代码……

-(void)viewDidAppear:(BOOL)animated 
    [super viewDidDisappear:animated];
    ...

导致 safeAreaLayoutGuide 在旋转后不更新。

谢谢大家的回答。

【讨论】:

以上是关于旋转设备后 safeAreaLayoutGuide 未更新的主要内容,如果未能解决你的问题,请参考以下文章

NSLayoutConstraint 和 safeAreaLayoutGuide - 编码兼容 pre-iOS 11

safeAreaLayoutGuide - 横向模式

设备旋转后 UIKeyboard 高度不同

当我们开始旋转设备并完成后会调用啥方法

设备旋转后的 UICollectionView contentOffset

如何修复 SafeAreaLayoutGuide