最近一段时间,在学习UIScrollView这个控件的时候,它的几个属性特别的让我产生混淆和不理解。所以在这里研究了一把,不对的地方希望大家指正。下面是我参考了一些博客之后自己对这几个属性的理解,让我们开始吧。
IOS中,UIScrollView是可以滚动的视图,其中最常用的UITableView就是继承了UIScrollView。跟所有的view一样,UIScrollView有一个frame属性,同时,UIScrollView还具有contentSize、contentOffset和contentInset属性。
对于contentSize,我的理解是他是UIScrollView的可以滚动的区域。你知道手机的屏幕是被固定死的,而我们往往需要查看一些比手机尺寸大很多的图片等信息,这个时候我们需要通过定义contentSize属性来制定图片的大小,通过滚动来将这个图片的所有信息给看完。你可以把UIScrollView看成是具有上下两层的一个复合视图,frame控制着上层的大小,我们看到的UIScrollView的大小实际就是frame的大小,上层固定不动,显示的变化,由下层的滚动来控制。而下层滚动的区域的大小,就是由contentSize来控制的了。例如:若frame = (0, 0, 320, 480) contentSize = (320, 960),代表本UIScrollView可以上下滚动,滚动区域为frame大小的两倍。
对于contentOffset,contentOffset是UIScrollView当前显示区域的顶点相对于frame顶点的偏移量,例如上面的例子如果拉到最下面,则contentOffset就是(0, 480),也就是y偏移了480。换句话说,你的手机屏幕大小为(300,600),你的scrollView的frame的大小为(0,0,300,600)你的scrollView的contentSize为(0,0,300,1200),这个时候相当于你想看的图片大小为两个手机屏幕的大小,contentOffset如果变成(0,0)的话,相当于图片的第一部分(和手机屏幕一样大)被呈现,图片的第二部分因为超过屏幕而被隐藏,这个时候你想要呈现图片的第二部分,你需要拖动图片,这个时候当你完全呈现图片的第二部分的时候第一部分也会被隐藏,这个时候contentOffset会变成(600,0),[顺便提一句偏移点是一个Point]。也就是说如果你的偏移点改变之后你屏幕所呈现的图片的区域就会发生改变。
对于contentInset,API文档的解释是"内容视图嵌入到封闭的滚动视图的距离"。可以理解为内容视图的上下左右四个边扩展出去的大小。contentInset的单位是UIEdgeInsets,默认值为UIEdgeInsetsZero,也就是没有扩展的边。
下面斯坦福大学对于这几个属性的图片指示,个人认为十分经典。
简答的总结一下:
contentInset简单的理解就是增加内容视图的四周的边距。
contentOffset简单理解就是通过指定偏移点(相当于内容区域的左上角起点)来显示内容的指定区域
contentSize当然就是指定scrollView的内容大小
如果有错误的地方大家来帮忙提出来,我可以及时修改,希望可以帮助到大家。