Fixed / Float view in UIScrollView with AutoLayout(UIScrollView 中的固定/浮动视图与 AutoLayout)
问题描述
在 此技术说明中,Apple 声明您可以通过向 UISCrollView 的超级视图添加约束来固定/浮动 UIScrollView 的子视图.我试过了,但我做错了,我不知道是什么问题.
In this technical Note Apple states that you can make a subview of UIScrollView fixed / floating by adding constraints to UISCrollView's superview. I tried that but I'm doing something wrong and I can't figure out whats the problem.
请注意,您可以通过在视图和滚动视图的子树之外的视图(例如滚动视图的超级视图)之间创建约束,使滚动视图的子视图看起来浮动(不滚动)在其他滚动内容之上.
Note that you can make a subview of the scroll view appear to float (not scroll) over the other scrolling content by creating constraints between the view and a view outside the scroll view’s subtree, such as the scroll view’s superview.
这就是我所做的.我已经设置了 UIScrollView 并尝试将固定视图添加到滚动视图的顶部,如下所示:
That's what I did. I have a UIScrollView already set up and try to add the fixed view to the top of the scrollview like the following:
_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)]];
但是,这不起作用,添加的视图将与滚动视图一起移动并且不会浮动".有什么想法吗?
However, this does not work, the added view will move along with the scrollview and does not 'float'. Any ideas whats wrong here?
推荐答案
在视图和滚动视图子树之外的视图之间,例如滚动视图的超级视图.
这部分很关键.self.scrollView
是 _testOverlay
的超级视图.因此,在 @"|[_testOverlay]|"
中,竖线引用 self.scrollView
.你必须用 _testOverlay
和(我想)self.view
之间的约束替换这个约束.我不确定视觉格式语言是否可行,但您当然可以使用 constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant
来实现.它会是这样的(我不会发布整个代码,因为它很长):
This part is critical. self.scrollView
is a superview of _testOverlay
. So, in @"|[_testOverlay]|"
vertical bars reference self.scrollView
. You have to replace this constraint with the constraint between _testOverlay
and (I suppose) self.view
. I'm not sure if it's possible with the visual format language, but you certainly can do it with constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant
. It would go like this (I won't post the whole code, because it's looong):
[self.view addConstraint:[NSLayoutConstraint
constraintWithItem:self.view
attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationEqual
toItem:_testOverlay
attribute:NSLayoutAttributeLeft
multiplier:1.0
constant:0]];
这篇关于UIScrollView 中的固定/浮动视图与 AutoLayout的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:UIScrollView 中的固定/浮动视图与 AutoLayout
基础教程推荐
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01