如何修复Storyboard中导航栏下移导致布局错乱的问题
这种情况我之前帮不少开发者排查过,大概率是Xcode版本更新后,Storyboard的安全区域适配、导航栏默认设置发生了变化导致的,别慌,一步步来修复:
检查导航控制器的「Adjust Scroll View Insets」设置
打开Storyboard选中你的UINavigationController,转到右侧的Attributes Inspector(属性面板),找到Scroll View板块,看看「Adjust Scroll View Insets」是不是被自动勾选了?有时候Xcode更新会悄悄修改这个默认设置,取消它之后,导航栏的偏移情况通常会立刻改善。重置控件的安全区域约束
如果你的控件是和安全区域顶部对齐的,Xcode版本更新后可能会改变安全区域的计算逻辑。选中那些偏移的控件,检查它们的约束:比如把原来的「Top to Safe Area」改成「Top to Superview」,或者手动调整约束的constant值;也可以直接选中整个ViewController,右键选择「Reset to Suggested Constraints」,让Xcode重新生成适配当前版本的约束。排查导航栏的「Prefers Large Titles」设置
有时候这个大标题模式会让Storyboard预览出现异常。选中导航栏,在Attributes Inspector里看看「Prefers Large Titles」是不是被意外开启了,关闭它再刷新一下Storyboard,布局大概率会恢复正常。清理Xcode缓存重新加载
Xcode的缓存偶尔会导致预览逻辑混乱。可以试试:关闭Xcode,找到Derived Data文件夹(通过Xcode的「Preferences -> Locations」能看到路径),手动删除整个文件夹,然后重新打开项目等待索引完成,再查看Storyboard。检查项目的Deployment Target
如果你的项目Deployment Target设置得比较低,最新Xcode对高版本iOS的适配逻辑可能会和旧版本冲突,导致预览异常。可以暂时把Deployment Target调到Xcode支持的最低版本,看看布局是否正常,之后再调回原来的版本(只要代码兼容就没问题)。
另外补充一句:如果运行模拟器时布局是正常的,那这大概率只是Storyboard的预览bug,上面的步骤也能修复预览显示问题;如果运行也有问题,那就要重点检查约束和导航控制器的设置是否符合当前iOS版本的适配规则了。
内容来源于stack exchange

