任何视图的自动布局约束通常与视图的 可见 边界有关,但是当涉及到 UIScrollView 时,自动布局约束是相关的使用 scrollView 的 contentView。
显然,因为 scrollView 是,嗯...应该滚动。
假设scrollView 有一个contentSize,类似于:
myScrollView.frame = CGRectMake(0, 0, 100, 100);
myScrollView.contentSize = CGSizeMake(1000, 1000);
现在...
比如说,在这个scrollView 中有一个subView,类似于:
UILabel *lblTest = [UILabel alloc] initWithFrame:CGRectMake(0, 0, 50, 50)];
[lblTest setText:@"Where am I?"];
[myScrollView addSubView:lblTest];
滚动前:
-
myScrollView.contentOffset.y 将是 0
-
myScrollView.bounds.y 将是 0
-
myScrollView.frame.origin.y 将是 0
-
lblTest.frame.origin.y 将是 0(并且将可见)
滚动后(到底部):
-
myScrollView.contentOffset.y 将更改为 900
-
myScrollView.bounds.y 将也成为900
-
myScrollView.frame.origin.y仍然是0
-
lblTest.frame.origin.y 将是 -900(不再可见)
这就是 Apple 文档的含义:
UIScrollView 类通过改变原点来滚动其内容
它的界限。
现在...
如果 Autolayout 与 UIScrollView 的可见边界相关,那么无论您滚动多少,UILabel 都不会向上滚动。
但是...
由于UIScrollView 中的自动布局与滚动视图的contentSize 相关,因此自动布局约束在其中与滚动功能相关。
所以...
当您在scrollView 中为subViews 使用自动布局时,它将与scrollView 的实际大小相关,而不是可见大小。