在带有AutoLayout的UIScrollView中的固定/浮动视图

在这个技术说明中, Apple声明可以通过向UISCrollView的超级视图添加约束来使UIScrollView的子视图固定/浮动。 我试过,但我做错了什么,我不明白什么是问题。

请注意,您可以通过在视图和滚动视图的子树之外的视图(如滚动视图的超级视图)之间创build约束来使滚动视图的子视图浮动(不滚动)其他滚动内容。

这就是我所做的。 我有一个UIScrollView已经设置,并尝试将固定的视图添加到滚动视图的顶部,如下所示:

_testOverlay = [[UIView alloc] init]; _testOverlay.backgroundColor = [UIColor blueColor]; _testOverlay.translatesAutoresizingMaskIntoConstraints = NO; [self.scrollView addSubview:_testOverlay]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[_testOverlay]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_testOverlay)]]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_testOverlay(64)]-(>=0)-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_testOverlay)]]; 

但是,这不起作用,添加的视图将随着滚动视图一起移动,而不会“浮动”。 任何想法这里错了什么?

在视图和滚动视图的子树之外的视图之间,例如滚动视图的超级视图

这部分是至关重要的。 self.scrollView_testOverlay视图。 所以,在@"|[_testOverlay]|" 垂直条引用self.scrollView 。 你必须用_testOverlay和(我想) _testOverlay之间的约束replace这个约束。 我不知道这是可能的视觉格式语言,但你当然可以用constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant 。 它会这样(我不会发布整个代码,因为它是looong):

 [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:_testOverlay attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0]]; 

添加叠加视图来滚动视图的超级视图,而不是滚动视图本身。

 [self.view addSubview:_testOverlay];