关于contentInset和contentOffset和frame和bounds

frame和bound主要就是坐标系的问题。
frame相对的是父坐标的坐标系:该view在父view的位置和大小
bounds相对的是本身的坐标系:该view在本地坐标系中的位置和大小
详情可参考 ios view的frame和bounds之区别(位置和大小)

说contentInset和和contentOffset的时候就要先说说contentSize

以UIScrollerView举例。contentSize表示的是内容区域的大小。做过广告栏滚动的应该都用过这个属性。可以理解为UIScrollerView有一个子view是ContentView.


然后contentInset和contentOffset应该就是关于内容视图的一些坐标问题了。

contentOffset 是scrollview当前显示区域顶点相对于frame顶点的偏移量。可以理解为contentview的顶点相对于scrollerVIew的frame的偏移量。内容视图向上滚动contentOffset.y>0。

比如我写了一个UIScrollerView上面放了两张图片,初始的时候contentOffset.y==0。

contentOffset.y==0

然后向上滚动contentOffset.y>0。

contentOffset.y>0

contentInset表示contentView.fram.orgin与scrollerView.fram.orgin的关系。可以类比于css里的padding。
比如scroller.contentInset = UIEdgeInsetsMake(50, 0, 0, 0);
则内容视图开始的位置为(0,50)

scroller.contentInset = UIEdgeInsetsMake(50, 0, 0, 0)

底部离父view的距离还是不变,下图是拉到最底部的时候

scroller.contentInset = UIEdgeInsetsMake(50, 0, 0, 0)

scroller.contentInset = UIEdgeInsetsMake(0, 0, 50, 0);
那么contentView底部离scrollerView底部的距离为50;

下图是拉到最底部的时候


scroller.contentInset = UIEdgeInsetsMake(0, 0, 50, 0);

最后做了一个小的demo,利用contentOffset计算来实现UITableView的sectionView跟随滚动并在顶部悬停的效果。
demo github地址

contentOffset.gif
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容