有人可以向我解释 UIScrollView
实例中的 contentInset
属性的用途吗?也许提供一个例子?
它设置内容视图和封闭滚动视图之间的插入距离。
对象-C
aScrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 7.0);
斯威夫特 5.0
aScrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 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)
滚动视图包含内容视图以及指定内容插图提供的任何填充。
虽然 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
我们希望文本永远不会透明地出现在 TOP BUTTONS 下方,但我们希望 Text 出现在 BOTTOM TAB BAR 下方,但仍允许滚动,因此我们可以更新透明地位于 BOTTOM TAB BAR 下方的文本。
然后我们将顶部原点设置在顶部按钮下方,高度包括底部标签栏的底部。为了访问位于底部标签栏内容下方的文本,我们将底部插图设置为底部标签栏的高度。
如果没有插入,滚动条不会让您向上滚动内容以输入内容。有了插图,就好像内容有额外的“空白内容”内容插图的大小。空白文本已“插入”到真正的“内容”中——这就是我记住这个概念的方式。
它用于在 UIScrollView
中添加填充
如果没有 contentInset
,表格视图是这样的:
https://i.stack.imgur.com/AgouYl.png
然后设置 contentInset
:
tableView.contentInset = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0)
效果如下:
https://i.stack.imgur.com/lyv67l.png
似乎更好,对吧?
并且我写了一个blog来研究contentInset
,欢迎批评。
好问题。
考虑以下示例(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)];
}
插图是强制滚动条在您想要的内容上具有“窗口”的唯一方法。我仍然在搞乱这个示例代码,但想法就在那里:使用插图在您的 UIScrollView
上获得一个“窗口”。
padding
属性。