控制器对象属性:自动调整scrollview的内边距

前提:

1.控制器的view是默认占据整个屏幕

 2.scrollview默认位置大小都为0,要占据整个屏幕,frame应该等于self.view.bounds

 3.这里的scrollview既指普通的scrollview也指tableview

 4.主要分析scrollview上面加多个tableview的结构

原则:

1.scrollview或者tableview一旦占据了整个屏幕,如果前面有导航条,系统会自动设置一个64的内边距,将内容视图下调64,内容位置发生变化

2.就算scrollview身上已经加了一个tableview,手动设置frame为全屏,这个tableview也会随着内容视图的改变而改变,因为tableview实质上是加到内容视图上的,也就是说系统不管你有没有手动设置子视图的frame,它是自动话判定,一遇到这种情况,就会自动调整

3.这样的调整是当前控制器对象内部通过一个属性自动调整scrolllview的内边距automaticallyAdjustsScrollViewInsets=YES进行调整的,注意这个属性是控制器对象的,而不是scrollview或者tableview的

调整后的优点与缺点:

优点:scrollview中的内容不再被导航条挡住

缺点:如果在scrollview上加了tableview后,tableview就会被压缩区域,内容的上下滚动,只能在限定的区域内移动,无法穿透整个导航条

注意:这里是讨论控制器view上加了scrollview,scrollview上右加了tableview,下调64,导致tableview随着下调,从而cell无法穿过导航栏,如果只是在控制器view上加了tableview,就不需要考虑这种情况

取消自动调整:

如何取消系统对scrollview或者tableview的自动调整呢?

self.automaticallyAdjustsScrollViewInsets = NO

此时内边距为0,这样tableview就可以设置frame占据整个屏幕,不会发生变化,cell也能通过导航栏

必须设置它的frame

如何设置frame呢?

y为0,宽高均为scrollview的宽高

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

推荐阅读更多精彩内容