有人能解释一下 UIScrollView实例中的 contentInset属性是用来做什么的吗?也许可以举个例子?
UIScrollView
contentInset
它设置内容视图和封闭滚动视图之间的插入距离。
Obj-C
aScrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 7.0);
Swift 5.0
aScrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 7.0)
这是一个很好的 关于滚动视图的 iOS 参考图书馆文章,它有一个信息丰富的截图(图1-3)——我将通过文本复制它:
_|←_cW_→_|_↓_ | | --------------- |content| ↑ ↑ |content| contentInset.top cH |content| ↓ |content| contentInset.bottom |content| ↓ --------------- _|_______|___ ↑ (cH = contentSize.height; cW = contentSize.width)
滚动视图包含内容视图以及指定内容插入所提供的任何填充。
问得好。
考虑下面的例子(scroller是一个 UIScrollView) :
scroller
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上的“窗口”。
虽然 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 上的内置照片应用程序。导航栏和状态栏是透明的,滚动视图的内容在下面是可见的。那是因为滚动视图的框架延伸到那么远。但是如果没有内容插入,当你一直到顶部的时候,你永远不可能让顶部的内容清楚透明的导航栏。
内容插入解决了内容位于用户界面的其他部分之下,但仍然可以使用滚动条访问的问题。换句话说,Content Inset 的目的是使交互区域小于实际区域。
考虑一下我们在屏幕上有三个逻辑区域的情况:
TOP BUTTONS TEXT BOTTOM TAB BAR
我们希望文本永远不要显示在顶部按钮的下面,但是我们希望文本显示在底部标签栏的下面,但是仍然允许滚动,所以我们可以更新文本显示在底部标签栏的下面。
然后,我们将顶部的原点设置为低于顶部的按钮,并高度包括底部的标签栏的底部。为了访问位于 BOTTOM TAB BAR 内容下面的 Text,我们将底部插图设置为 BOTTOM TAB BAR 的高度。
如果没有插入,滚动器将不允许您向上滚动足够的内容以便在其中输入内容。使用 inset 时,就好像内容有额外的“ BLANK CONTENT”,其大小与内容 inset 相同。空白文本已经“插入”到真正的“内容”中——这就是我如何记住这个概念的。
它用于在 UIScrollView中添加填充
如果没有 contentInset,表视图是这样的:
然后设置 contentInset:
tableView.contentInset = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0)
效果如下:
看起来好多了,对吧?
并且我写了一个 博客来学习 contentInset,欢迎批评。