UIScrollView中使用AutoLayout实现固定/浮动视图

6
这篇技术说明 中,苹果宣称你可以通过向 UIScrollView 的 superview 添加约束条件来使 UIScrollView 的子视图固定 / 浮动。我尝试了这种方法,但是出现问题,无法找到问题所在。
请注意,您可以通过在视图和滚动视图的子树之外 (例如滚动视图的 superview) 的视图之间创建约束来使滚动视图的子视图看起来浮动(而不是滚动)到其他滚动内容上方。
这就是我所做的。我已经设置好一个 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)]];

然而,这样做行不通,添加的视图会随着滚动视图移动,而不是“浮动”。有什么想法是错的吗?
2个回答

6

该代码片段描述了滚动视图子树以外的视图与视图之间的关系,例如滚动视图的父视图。

这部分内容非常关键。 self.scrollView_testOverlay 的父视图。因此,在 @"|[_testOverlay]|" 中,竖线引用了 self.scrollView。你需要用约束代替 _testOverlay 和 (我猜) self.view 之间的约束。我不确定使用可视格式语言是否可行,但您可以使用 constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant 来完成。它将像这样进行(我不会发布整个代码,因为它很长):

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

做到了!我原以为用"|"调用的视觉格式语言superview是我要添加约束的视图。谢谢! - Ben Lime
1
如果我的 self.viewUITableView 并且没有超级视图,我该如何处理? - Eimantas

0
将叠加视图添加到滚动视图的父视图中,而不是滚动视图本身。
[self.view addSubview:_testOverlay];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接