iOS 9 Safe Area Top 约束的 xib 和 storyboard 不同

Posted

技术标签:

【中文标题】iOS 9 Safe Area Top 约束的 xib 和 storyboard 不同【英文标题】:iOS 9 Safe Area Top constraint of xib and storyboard is different 【发布时间】:2018-11-01 10:21:25 【问题描述】:

ios 9、iPhone 5 上,在 iOS 10 及更高版本上没有发生

UIViewController 从 storyboard 创建,我设置 viewController 的红色 subView 的 view.top 等于 safe area top,红色的 view 就在 statusBar 的下方。

如果从 xib 文件创建 viewController,使用init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) 并设置红色 subView 的 view.top 等于安全区域顶部,红色视图与 statusBar 位于同一 origin.y。如下:

从storyboard和xib创建的viewControllers是同一个类,也许从storyboard创建的和xib有一些不同的设置,我尝试取消选择所有storyboard选择选项,但没有找到有区别的那个。

谁能解释一下?谢谢!

这个问题的回购:https://github.com/codingingBoy/SafeAreaDemo.

【问题讨论】:

【参考方案1】:

XIB 和旧 iOS 版本的安全区指南存在向后兼容性问题,因为 XIB 文件没有它们。

在当前的 Xib 向后部署行为中(iOS 10 和更早版本),对安全区域的约束将转换为超级视图,因为 XIB 没有顶部和底部布局指南。

这可能无法实现您想要的布局行为,我们建议您使用以下选项之一解决这种情况:

1) 将视图和布局移动到情节提要视图控制器

2) 将 IB Outlets 用于相关(顶部和底部)约束,并在安装视图后以编程方式将它们替换为顶部/底部布局指南的约束

3) 将视图安装为子视图,并以编程方式将约束添加到顶部/底部布局指南和侧面。

参考:https://forums.developer.apple.com/thread/87329

【讨论】:

感谢您的解释和解决方案!

以上是关于iOS 9 Safe Area Top 约束的 xib 和 storyboard 不同的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 9.0 报错,Safe Area Layout Guide Before IOS 9.0

Safe Area Layout Guide before iOS 9.0

ios11安全域的兼容问题

iOS开发--利用Safe Area 适配iPhone X

Xcode9出现错误safe area layout guide before ios 9 真正解决办法

Safe Area Layout Guide