我在使用自动布局约束时遇到了 UIScrollView 的问题。 我有以下 View 层次结构,通过 IB 设置约束:
- ScrollView (leading, trailing, bottom and top spaces to superview)
-- ContainerView (leading, trailing, bottom and top spaces to superview)
--- ViewA (full width, top of superview)
--- ViewB (full width, below ViewA)
--- Button (full width, below ViewB)
ViewA 和 ViewB 的初始高度为 200 点,但可以通过单击垂直扩展至 400 点的高度。 ViewA 和 ViewB 通过更新它们的高度约束(从 200 到 400)来扩展。这是相应的片段:
if(self.contentVisible) {
heightConstraint.constant -= ContentHeight;
// + additional View's internal constraints update to hide additional content
self.contentVisible = NO;
} else {
heightConstraint.constant += ContentHeight;
// + additional View's internal constraints update to show additional content
self.contentVisible = YES;
}
[self.view setNeedsUpdateConstraints];
[UIView animateWithDuration:.25f animations:^{
[self.view layoutIfNeeded];
}];
我的问题是,如果两个 View 都展开,我需要能够滚动才能看到整个内容,而现在滚动不起作用。如何使用约束来更新 ScrollView 以反射(reflect) ViewA 和 ViewB 高度的变化?
目前我能想到的唯一解决方案是在动画后手动设置ContainerView的高度,这将是ViewA + ViewB + Button的高度之和。但我相信有更好的解决方案?
谢谢
最佳答案
我使用如下纯结构
-view
-scrollView
-view A
-view B
-Button
确保 Button(THE LAST view) 有一个约束(从其底部到父 View 的垂直间距,即 ScrollView ),在这种情况下,无论您的 View A 和 View 发生什么变化B 是,scrollView 的高度会相应改变。
我引用了这个伟大的在线book site .
只需阅读“创建 ScrollView ”部分,您应该会有一个想法。
我在创建详细 View 时遇到了类似的问题,并且使用具有自动布局的 Interface Builder 非常适合该任务!
祝你好运!
(其他资源:
关于 auto layout for scroll view 的堆栈溢出讨论.
iOS 6 有一个 Release Notes谈论对 UIScrollView 的自动布局支持。
免费在线iOS book explanation关于 ScrollView 。这实际上对我帮助很大!
关于ios - 具有动态高度的 subview 的自动布局 UIScrollView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16825189/