UIScrollView的contentSize、contentOffset和contentInset的理解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UIScrollView的contentSize、contentOffset和contentInset的理解相关的知识,希望对你有一定的参考价值。

参考技术A 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,即内容视图嵌入到封闭的滚动视图的距离,可以理解为内容视图的上下左右四个边扩展出去的大小。

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

具有可变 contentSize 的 UIScrollView

【中文标题】具有可变 contentSize 的 UIScrollView【英文标题】:UIScrollView with variable contentSize 【发布时间】:2015-07-27 18:49:06 【问题描述】:

我正在尝试创建一个可水平滚动的 UIScrollView,它具有可变内容,由按钮组成。我希望用户可以左右滚动以到达不同的按钮。不过,我理解它的方式是,我需要一个固定的框架(内容的大小)来滚动,而我没有(因为内容是可变的)。我该怎么办?如何获取与按钮相关的 contentSize 以及应该如何定义 contentSize?

如何设置按钮的屏幕截图如下所示。当加载更多按钮(超过 8 个)时,用户应该能够滚动到一侧以便查看和使用附加按钮。

编辑:有什么帮助吗?我宁愿不去钻研 UICollectionViews 的麻烦!

【问题讨论】:

【参考方案1】:

您可能想查看一个 UICollectionView,它可能会减少工作量并为您提供所需的内容。

【讨论】:

以上是关于UIScrollView的contentSize、contentOffset和contentInset的理解的主要内容,如果未能解决你的问题,请参考以下文章

KVO - UIScrollView.contentSize误报?

UITableView/UIScrollView 如何自动知道 ContentSize 何时发生变化?

无法在 WKWebView 中更改 UIScrollview 的 contentSize

UIScrollView contentsize 属性

UIScrollView ContentSize 未按预期运行

设置了 contentsize 的 UIScrollView 无法滚动超出帧边界