ios - 使用自动布局增加 ScrollView 中的 View 高度

标签 ios animation height scrollview autolayout

view controller with constraints

这里的所有 View (导航栏除外)都在 ScrollView 中。 ScrollView 的所有子项都固定了高度,并在它们之间设置了垂直间距。顶部标签(感谢使用...)和底部按钮(切换)分别垂直固定到顶部和底部的 ScrollView 。底部按钮也固定到底部布局指南。

我想要在红色 View 上有一个灵活的高度。红色 View 是唯一具有不等式约束的 View 。高度 >= 64

灵活高度的作用在于,红色 View 的高度会自动扩展到 152 以填充 4 英寸设备上的额外空间。

但是,我想进一步扩大高度。在代码中,当有人点击“切换”按钮时,我想将该红色 View 的高度扩展到比方说 300。

- (IBAction)toggle:(id)sender
{
    [self.scrollView layoutIfNeeded];
    [UIView animateWithDuration:1.0 animations:^{
        self.constraint.constant = 300;
        [self.scrollView layoutIfNeeded];
    }];
}

当我这样做时,我在控制台中收到错误消息。 “无法同时满足约束条件。”以“Will attempt to recover by breaking constraint”结尾,它打破了我刚刚为 300 高度设置的约束。

那么....我如何将红色 View 的高度设置为更大的值,例如 300?我假设如果我更新它的高度限制,scrollView 的 contentSize 会自动调整,但这似乎没有发生。

最佳答案

您在代码中正确设置了约束的高度。但是,您的布局需要进行一些调整才能使其正常工作。

看起来您正在将 subview 添加到 ScrollView 本身。相反,您需要将内容 View 添加到 ScrollView ,然后将 subview 添加到内容 View 。

有关如何通过 UIScrollView 使用自动布局的更多信息,请查看 Apple 的技术说明:developer iOS technotes

在您的特定情况下,我会使用 Apple 所谓的“混合方法”。在这种方法中,您直接设置内容 View 的框架和 ScrollView 的内容大小。计算高度会很痛苦。这涉及计算每个 subview 的高度加上边距和间隔。

关于ios - 使用自动布局增加 ScrollView 中的 View 高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20670452/

相关文章:

IE/Chrome 中的 jQuery/CSS 高度问题

ios - 使用 locationManager.requestLocation() 时应用程序崩溃

html - 如何使 <textarea> 使用剩余的可用高度

swift - Tableview根据内容快速动态设置行高?

android - 如何为按钮内的文本设置动画

html - CSS 动画 - 每次悬停时进一步旋转 45 度

javascript - Three.js:对盒状几何体进行动画处理

ios - Segue 不会传递数据

ios - 基于 GCM 的服务器和 Firebase 客户端 (iOS) 可以工作吗?

ios - 使用 UIBezierPaths 反转自定义 UIView 上的 CGAffineTransform 旋转