关于UITableviewWrapperview显示不正确的问题

问题描述:在使用了navigationController的情况下对子视图手动添加了64的偏移。



系统对于作为uinavigationViewController的第一个subView的全屏UIScrollView,会自动处理其contentInset,使其头部和尾部的内容起始和末尾时不会被UINavigationBar和UITabBar挡住。

navigationController的automaticallyAdjustsScrollViewInsets属性为yes时会自动对contentview上的第一个uiscrollview自动加bar的insets(一般为64,下面都以64来说,但有些情况下不是64,比如接电话时,是84)。

如果要想scrollview的内容从(0,0)位置开始,只要把viewController的automaticallyAdjustsScrollViewInsets属性设为NO就可以了。

如果设置了automaticallyAdjustsScrollViewInsets = NO;但又想内容从navigationBar下面开始,对于scrollview,可以设置contentInset,或者手动设置64的偏移量了,但是除非另外加上一些代码判断,当遇到接电话、录音、连接个人热点等通知栏高度改变时界面会错位。而对于非scrollview,automaticallyAdjustsScrollViewInsets对他们不起作用

更方便的方法就是设置其edgesForExtendedLayout属性,该属性默认为UIRectEdgeAll,意为view会充分扩展至屏幕边缘包括上下左右,而不管有没有遮挡,此时就是view的frame即为整个屏幕。

好的方法是用autolayout,并且不设置偏移(顶部到顶),然后在viewDidLoad中设置self.edgesForExtendedLayout=UIRectEdgeNone
这样设置的作用是让controller绘制视图时不要将顶部通知栏、导航栏和底部toolbar等的高度计算在contentview中,所以这样设置之后就可以不设置tableview的偏移也可以显示正常,然后使用autolayout的目的是为了界面重载时(如切换打电话状态)也能重新调整界面

解决:


相关链接:
http://bbs.csdn.net/topics/391833162 见12楼解释
http://www.jianshu.com/p/c0b8c5f131a0

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

推荐阅读更多精彩内容

  • 适配iOS11 🍎苹果官方文档🍎苹果官方视频为了挣钱...哦😯不是,为了广大中国的开发者,苹果官方文档出了好多中文...
    philiha阅读 1,181评论 1 50
  • UIWindow 初始化: self.window= [[UIWindowalloc]initWithFrame:...
    Sunny_Fight阅读 1,062评论 0 1
  • 人就怕不具体,一具体就踏实了。 在微博上看到这句话,心里明了起来。沉溺于想象中的抽象生活是没有任何意义的,徒增烦扰...
    余应心阅读 267评论 0 5
  • 这周,笑来老师教我们了“个人商业模式升级路线”,单份出售自己的时间(同时给自己打工)--买时间----彻底给自己打...
    倩倩moni阅读 190评论 0 1
  • 面试的人扶了一个老人被录取,拣起一个垃圾被录取,你为什么不愿意,直到知道这个人因此被录取才去做,有意义吗? ...
    自云雨中阅读 288评论 0 0