什么是UIScrollView contentInset属性?

有人可以向我解释一下UIScrollView实例中的contentInset属性是用来做什么的? 也许提供一个例子?

它设置内容视图和封闭滚动视图之间的插入距离。 aScrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 7.0);

这里有一个关于滚动视图的好的iOS Reference Library文章,它有一个信息截图(图1-3) – 我将通过文本在这里复制它:

  _|←_cW_→_|_↓_ | | --------------- |content| ↑ ↑ |content| contentInset.top cH |content| ↓ |content| contentInset.bottom |content| ↓ --------------- _|_______|___ ↑ (cH = contentSize.height; cW = contentSize.width) 

滚动视图包含内容视图加上指定的内容插入提供的任何填充。

虽然jball的答案是内容插入的一个很好的描述,但它并没有回答何时使用它的问题。 我会借用他的图表:

  _|←_cW_→_|_↓_ | | --------------- |content| ↑ ↑ |content| contentInset.top cH |content| ↓ |content| contentInset.bottom |content| ↓ --------------- |content| -------------↑- 

当你这样做的时候就是这样,但是只有当你滚动时才会显示它的用处:

  _|←_cW_→_|_↓_ |content| ← content is still visible --------------- |content| ↑ ↑ |content| contentInset.top cH |content| ↓ |content| contentInset.bottom |content| ↓ --------------- _|_______|___ ↑ 

该内容的顶部行仍然可见,因为它仍然在滚动视图的框架内。 考虑顶部偏移量的一种方法是“当滚动到顶部时滚动视图的内容要多less”

要查看实际使用的位置,请查看iphone上的内置照片应用程序。 导航栏和状态栏是透明的,滚动视图的内容在下面是可见的。 这是因为滚动视图的框架延伸到那么远。 但是,如果不是内容插入,当你一直走到最前面的时候,你将永远无法使内容的顶部清楚透明的导航条。

内容插入解决了将内容放置在用户界面的其他部分之下但仍然可以使用滚动条到达的问题。 换句话说,内容插入的目的是使交互区域小于实际区域。

考虑一下我们在屏幕上有三个逻辑区域的情况:

 TOP BUTTONS TEXT BOTTOM TAB BAR 

我们希望TEXT永远不会透明地出现在顶部button下方,但是我们希望文本出现在BOTTOM TAB BAR下面,但仍然允许滚动,因此我们可以更新文字,透明地坐在BOTTOM TAB BAR下面。

然后,我们将顶部原点设置在顶部button下方,高度包括底部底部的底部。 要访问坐在BOTTOM TAB BAR内容下的文本,我们将底部插入设置为BOTTOM TAB BAR的高度。

如果没有插入,滚动不会让你滚动内容足够input到它。 插入内容,就好像内容有额外的“BLANK CONTENT”内容插入的大小。 空白文本已经“embedded”到真实的“内容” – 这就是我如何记住这个概念。

伟大的问题。

考虑下面的例子( scroller是一个UIScrollView):

 float offset = 1000; [super viewDidLoad]; for (int i=0;i<500; i++) { UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(i * 100, 50, 95, 100)] autorelease]; [label setText:[NSString stringWithFormat:@"label %d",i]]; [self.scroller addSubview:label]; [self.scroller setContentSize:CGSizeMake(self.view.frame.size.width * 2 + offset, 0)]; [self.scroller setContentInset:UIEdgeInsetsMake(0, -offset, 0, 0)]; } 

插入是唯一的方法来迫使你的滚动在你想要的内容上有一个“窗口”。 我仍然在讨论这个示例代码,但是这个想法就在那里:使用这个insets来在你的UIScrollView上获得一个“窗口”。

它用来在UIScrollView添加填充

没有contentInset ,表格视图就像这样:

在这里输入图像说明

然后设置contentInset

 tableView.contentInset = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0) 

效果如下:

在这里输入图像说明

似乎更好,对吧?

而我写博客来研究contentInset ,批评是值得欢迎的。