Storyboard自动布局中遇到的问题
做项目时,需要一个页面隐藏Nav,tableView从状态栏顶部开始布局,可是自动布局过程中,tableView总是从statusBar下面开始布局(顶部总是覆盖不了状态栏)。后来我发现了问题,找到了解决方法。
先说一下我的解决方法
1.在storyboard中,选中viewController,在右侧属性栏找到“Adjust Scroll View Insets”选项,取消勾选此项。
2.为tableview布局添加约束时,点击数值右侧的向下箭头,选择“View(current distance = 0)”,不要选“Top Layout Guide(current distance = 0)”
关于Top Layout Guide和Bottom Layout Guide
原来自动布局时,是可以选择你的约束是基于superview还是layout guide的。网上关于layout guide的描述如下:
Top Layout Guide用于自动布局的辅助,在Storyboard中可以看到Top Layout Guide作为ViewController的属性存在,也就是topLayoutGuide,官方文档对这个属性的Discussion是:
topLayoutGuide属性表示不希望被透明的状态栏或导航栏遮挡的内容范围的最高位置。这个属性的值是它的length属性的值(topLayoutGuide.length),这个值可能由当前的ViewController或这个ViewController所属的NavigationController或TabBarController决定,有如下情况:
一个独立的ViewController,不包含于任何其他的ViewController。如果状态栏可见,topLayoutGuide表示状态栏的底部,否则表示这个ViewController的上边缘。
包含于其他ViewController的ViewController不对这个属性起决定作用,而是由容器ViewController决定这个属性的含义:
如果导航栏(Navigation Bar)可见,topLayoutGuide表示导航栏的底部。
如果状态栏可见,topLayoutGuide表示状态栏的底部。
如果都不可见,表示ViewController的上边缘。
这部分还比较好理解,总之是屏幕上方任何遮挡内容的栏的最底部。
摘自:https://www.2cto.com/kf/201801/711102.html
同理可知:bottom Layout Guide和topLayoutGuide正好相反,就是适配屏幕下方任何遮挡内容的栏的最顶部。