TableView上面出现一段空白

问题:

个人测试,在ios8 ios10TableView上面出现一段空白,ios11上没问题,逆向查看了一下,发现结构是这样的:


TableViewCell整体下移。

问题原因:

iOS7以后tableView中间也多了一层UITableViewWrapperView,我们平时放的cell都是放到了UITableViewWrapperView上,并没有直接放到tableView上。

navigationControllerautomaticallyAdjustsScrollViewInsets属性为yes时会自动对contentview上的第一个uiscrollviewuitableview也是uiscrollerview)自动加barinsets(一般为64,下面都以64来说,但有些情况下不是64,比如接电话时,是84
所以一般情况下使用navigationController时不用特别处理navigationController的高度问题,因为会自动把视图往下移动64。

解决方案:

设置automaticallyAdjustsScrollViewInsetsno即可,要注意,automaticallyAdjustsScrollViewInsetsviewController的不是navigationcontroller的。

但是这样也不是最好的解决方案,因为你手动加64就只能是64,除非用大量代码判断,否则接电话、录音、连接个人热点等通知栏高度改变时界面会错位(可以在viewDidLayoutSubviews中重新设置偏移)
好的办法应该是用autolayout,并且不设置偏移(顶部到顶),然后在viewDidLoad中设置self.edgesForExtendedLayout=UIRectEdgeNone
这样设置的作用是让controller绘制视图时不要将顶部通知栏、导航栏和底部toolbar等的高度计算在contentview中,所以这样设置之后就可以不设置tableview的偏移也可以显示正常,然后使用autolayout的目的是为了界面重载时(如切换打电话状态)也能重新调整界面。

不想研究,就想马上解决问题

如果你想立刻解决这个问题,直接在ViewController中加入如下代码:

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

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,196评论 4 61
  • 今天是论坛结束的第3天,欠着活动现场36份无意识测评反馈要完成,这几天都是深夜赶工中,可是奇了怪了,也只有深...
    胡永群阅读 4,082评论 0 51
  • 这个系列是用一个小时的时间去玩一个手机app并写出一篇文章。思考可能很粗浅,逻辑性可能不是太强,是作为一个促进我思...
    Centlin阅读 3,682评论 3 4
  • “静”左边一个青,右边一个争。青是初生物的颜色,争则是上下两手双向持引,寓意坚持。静是不受外在滋扰而坚守初生本色。...
    采云的小天地阅读 3,502评论 1 7