自动布局和 UIScrollView

Posted

技术标签:

【中文标题】自动布局和 UIScrollView【英文标题】:Autolayout and UIScrollView 【发布时间】:2014-01-27 12:39:18 【问题描述】:

所以我想摆脱代码中的所有“框架”并完全切换到自动布局。但是有一种情况,我希望视图的 Y 位置依赖于 UIScrollViewcontent offset (bounds.origin.y)。使用auto layout 的正确方法是什么?一个想法是每次更改scrollview content offset 时更新NSLayoutConstraint 的常量,(但是在这里使用自动布局有什么意义?)所以我希望有更好的方法来实现“纯” autolayout.

我知道这里经常讨论“Autolayout & UIScrollView”,所以我想强调一下,我不想对UIScrollView 子视图使用自动布局,我有一个UIView 有2 个子视图;一个UIScrollView 和一个UIView 对象,我想使用自动布局来指定UIView 顶部坐标和UIScrollView 内容偏移量之间的关系。

【问题讨论】:

【参考方案1】:

好的,你可以很容易地做到这一点。这基本上就像您使用框架一样。

首先,您需要创建“变量”约束并将其保存到属性中。

您可以在代码中执行此操作...

self.heightConstraint = [NSLayoutConstraint constraintWithItem:self.theView
attribute:
relatedBy:
toItem:
attribute:
multiplier:
constant:];
// set up the rest

[self.view addConstraint:self.heightConstraint];

或者在 Interface Builder 中创建约束,然后按 ctrl 拖动到属性。 (与任何其他 IBOutlet 一样)。

那么当scrollView滚动时...

self.heightConstraint.constant = calculatedValueFromTheOffset;

[self.view layoutIfNeeded];

这将移动视图,就像您使用框架但使用自动布局约束一样。

【讨论】:

谢谢,这就是我在这里的意思“一个想法是每次滚动视图内容偏移量发生变化时更新 NSLayoutConstraint 的常量”。实际上,它不是“高度”约束,而是“顶部 y”约束 好的,很酷。是的,这正是你要做的。没有办法将约束和滚动视图的偏移量联系起来,因此实际上不可能以任何其他方式做到这一点。对不起。

以上是关于自动布局和 UIScrollView的主要内容,如果未能解决你的问题,请参考以下文章

自动布局和 UIScrollView

带有 UIScrollView 的纯自动布局

UIScrollView 使用纯自动布局不向右扩展

自动布局 + UIScrollView 和单个子视图

自动布局正在改变 UIScrollView 的 contentOffset 旋转

具有动态视图数量和自动布局 iOS6 的 UIScrollView