首页 > 解决方案 > iOS 9 Safe Area Top 约束的 xib 和 storyboard 不同

问题描述

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

UIViewController 从情节提要创建,我将 viewController 的红色 subView 的 view.top 设置为安全区域顶部,红色视图就在 statusBar 的下方。

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

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

任何人都可以解释这一点吗?谢谢!

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

标签: iosswiftios-autolayoutsafearealayoutguide

解决方案


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

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

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

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

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

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

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


推荐阅读