使用AutoLayout在UIScrollView中修复/浮动视图

Ben*_*ime 6 header uiscrollview ios autolayout

本技术说明中, Apple声明您可以通过向UISCrollView的superview添加约束来使UIScrollView的子视图固定/浮动.我试过了,但我做错了,我无法弄清楚问题是什么.

请注意,通过在视图和滚动视图子树外部的视图(例如滚动视图的超级视图)之间创建约束,可以使滚动视图的子视图显示为浮动(不滚动)在其他滚动内容上.

这就是我做的.我已经设置了UIScrollView并尝试将固定视图添加到scrollview的顶部,如下所示:

_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)]];
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用,添加的视图将与scrollview一起移动并且不会"浮动".这里有什么想法吗?

Are*_*lko 6

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

这部分很关键.self.scrollView是一个超级视图_testOverlay.所以,在@"|[_testOverlay]|"垂直条参考self.scrollView.你必须用和之间的约束替换这个约束_testOverlay(我想)self.view.我不确定是否可以使用可视化格式语言,但你当然可以使用它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]];
Run Code Online (Sandbox Code Playgroud)