ios - 具有动态高度的 subview 的自动布局 UIScrollView

标签 ios objective-c uiscrollview autolayout

我在使用自动布局约束时遇到了 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/

相关文章:

ios - 使用 Interface Builder 为 UITabBarViewController 设置委托(delegate)时应用程序崩溃

ios - 在 NSObject iOS 中取消 objective-c block

ios - 最后一个 UITableViewCell 中的 UICollectionView 和一致的滚动?如何?

ios - 如何在 swift IOS 中创建具有多个堆栈 View 的可滚动堆栈 View

ios - 如何将 xml 字符串分成元组?

ios - UIScrollView圆顶效果

ios - Flutter:无法安装应用程序,因为即使在开发者帐户上添加了 Iphone 设备的 UDID 也无法验证其完整性

ios - 发送的 NSNotification 对象是(null)?

ios - 在同一类的所有对象中隐藏某些内容

ios - 将 View 数加载到 UIScrollView 时由于内存错误而终止