UIScrollView的contentSize、contentOffset和contentInset的理解

在iOS中,UIScrollView(继承UIKit.framework重的UIView)是UIKit.framework中的一个可以滚动的视图,最常见的UITableView、UICollectionView就是继承了UIScrollView。跟所有的view一样,UIScrollView有一个属性frame,同时其还具有另外三个属性:
@property(nonatomic) CGPoint contentOffset; // default CGPointZero
@property(nonatomic) CGSize contentSize; // default CGSizeZero
@property(nonatomic) UIEdgeInsets contentInset; // default UIEdgeInsetsZero. add additional scroll area around content

contentSize,即UIScrollView的可以滚动的区域。手机的屏幕是固定的,但是如果要滚动查看比手机屏幕更大的图片,那么就需要设置contentSize属性,将其设定为图片的大小。可以将UIScrollView看成具有上下两层的复合视图,frame控制着上层的大小,就是我们所看到的区域,上层固定不动,显示的变化,是由下层的滚动来控制。而滚动区域的大小则有contentSize来控制。例如:若frame=(0,0,320,480),contentSize=(320,960),代表UIScrollView可以上下滚动,滚动区域为frame大小的两倍。
contentOffset,即UIScrollView当前显示区域的顶点相对于frame顶点的偏移量,例如上面的例子,如果拉到最下面,则contentOffset就是(0,480),也就是y便宜了480。换句话说手机屏幕大小为(300,600),scrollView的frame为(0,0,300,600),contentSize为(0,0,300,1200),这时候能看到的区域大小为两个手机屏幕的大小,contentOffset为(0,0),则看到的上半部分内容,若为(0,600),可以看到后半部分的内容。
contentInset,即内容视图嵌入到封闭的滚动视图的距离,可以理解为内容视图的上下左右四个边扩展出去的大小。

image.png
image1.png
image2.png

总结如下:
contentInset,增加内容视图的四周的边距
contentOffset,通过指定偏移点(相当于内容区域的左上角起点)来显示内容的指定区域
contentSize,指定scrollView的内容大小

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

推荐阅读更多精彩内容