UITableView 顶部空白总结
开发中总存在适配问题,而tableView最容易出现顶部留白问题,我明明设置好的,为啥tableView偏移了,心中十万个CNM。不要担心,一般由以下问题导致。
1.tableView的样式为Grouped [空白区高度:40]。
解决:设置tableHeaderView的view高度为0.01。
2.设置了tableView的header高度为0或者未设置[空白区高度:40]。
原因:由于系统tableView初始化的时候会将header高度设置为40,不懂为啥设置为0的时候都会设置为40。
解决:将header的高度设置为0.001f (如果设置为0则会系统默认为40)
3.Controller的automaticallyAdjustsScrollViewInsets属性设置问题[空白区20 或40(iPhone X)]。
原因:当Controller中有唯一ScrollView或器子类时【多个scrollView遮挡问题】,控制器会自动根据是否有导航栏和状态栏来设置scrollView的Inset边距,以达到最好的显示效果,防止遮挡。比如没有导航栏,会默认将scrollView从状态栏的bottom开始布局,所以就留下状态栏图层下为空白的,这就是automaticallyAdjustsScrollViewInsets的效果。
解决:
iOS7~iOS10
将Controller的self.automaticallyAdjustScrollViewIneset 置为NO(默认为yes)// 不用自动适应,直接将其置为全屏布局。
>= iOS11
self.contentInsetAdjustmentBehavior = XXXXNever(默认为XXXAutomatic) ;
4.tableView设置top约束布局基于safeArea 同时将self.automaticallyAdjustScrollViewInset设置为NO,就会出现空白[空白区20 或40(iPhone X)]
解决同3;
5.如果将导航栏的translucent设置为NO; contentInset会恢复为zero, 就会多出64空白。
综合解决:以上都无法解决可以尝试
手动将contentInset 设置为Zero,但是注意需要在viewDidApear 何 wiewDidLayout中设置有效。