什么是UIScrollView contentInset属性?

时间:2009-12-31 01:14:26

标签: uiscrollview

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

5 个答案:

答案 0 :(得分:231)

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

这是一个很好的iOS Reference Library article on scroll views,它有一个信息丰富的屏幕截图(图1-3) - 我将通过文本复制它:

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


   (cH = contentSize.height; cW = contentSize.width)

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

答案 1 :(得分:83)

虽然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| ↓
---------------
  _|_______|___ 
             ↑

该第一行内容仍然可见,因为它仍在滚动视图的框架内。考虑顶部偏移的一种方法是“当我们一直滚动到顶部时,将内容向下移动多少滚动”

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

答案 2 :(得分:8)

内容插入解决了内容位于用户界面的其他部分下方但仍然可以使用滚动条保持可访问的问题。换句话说,内容插入的目的是使交互区域小于其实际区域。

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

TOP BUTTONS

TEXT

BOTTOM TAB BAR

我们希望TEXT永远不会透明地出现在TOP BUTTONS下面,但是我们希望Text出现在BOTTOM TAB BAR下面但仍然允许滚动,这样我们就可以更新透明地坐在BOTTOM TAB BAR下的文本。

然后我们将顶部原点设置为低于TOP BUTTONS,高度设置为BOTTOM TAB BAR的底部。要访问位于BOTTOM TAB BAR内容下方的Text,我们将底部插图设置为BOTTOM TAB BAR的高度。

如果没有插入,滚动条不会让您向上滚动内容足以输入内容。使用插图,就好像内容具有内容插入大小的额外“BLANK CONTENT”。空白文本已经“插入”真正的“内容” - 这就是我记忆中的概念。

答案 3 :(得分:5)

它用于在UIScrollView

中添加填充

没有contentInset,表格视图如下:

enter image description here

然后设置contentInset

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

效果如下:

enter image description here

似乎更好,对吧?

我写blog来研究contentInset,欢迎批评。

答案 4 :(得分:2)

很棒的问题。

考虑以下示例(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上获得一个“窗口”。