有导航栏时, scrollView,tableView的内容下移问题

在设置tableView.frame = self.view.bounds时,有时候内容的显示会有不同,做一下总结。首先,当设置self.navigationController.navigationBar.translucent = NO时,控制器view的起始位置是在导航栏的底部,所以tableView的起始位置也是在导航栏的底部,如下图
image.png

当设置self.navigationController.navigationBar.translucent = YES(系统默认)时,self.view的起始位置是在导航栏的顶部,所以tableView的起始位置也是在导航栏的顶部,见下图
image.png
此时tableView的第一个cell仍然是从导航栏底部开始布局,这是因为scrollView的contentInsetAdjustmentBehavior属性,默认是Automatic,默认是如果控制器view的第一个视图是scrollView时(存疑?),会给它设置一个等于导航栏高度加安全区的contentInset.top,为了让内容能够正常显示,同样如果底部有tabbar, 也会有等于tabbar高度加安全区的contentInset.bottom,在这种情况下,如果手动tableView的y = 导航栏高度加安全区,那么tableView的高度也要相应减少。
如果不希望有内边距,让tableView的内容从导航栏顶部开始展示,需要设置属性contentInsetAdjustmentBehavior为UIScrollViewContentInsetAdjustmentNever,见下图
image.png

如果tableView需要sectionHeader悬浮 的功能,可以设置tableView的y从导航栏底部开始,或者设置self.navigationController.navigationBar.translucent = NO.

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容