高度未知的 iOS 自动布局

标签 ios autolayout

我正在尝试按如下方式设置我的 View

layout

每个 View 都包含许多 subview ,例如标签和按钮。 对于我的项目,我必须使用自动布局。 具体来说,我正在使用名为 FLKAutolayout 的第 3 方库,它可以让事情变得更快。 问题是这些 View 中的每一个都有一个动态高度。 可以将每个 View 的两侧固定到父 View 的每一侧。 然而,当涉及到垂直排列时,我遇到了模棱两可的布局。 我试图将 View 1 固定到 super View 的顶部,将 View 2 的顶部固定到 View 1 的底部,将 View 3 的顶部固定到 View 2 的底部,等等。如果我不将最底部的 View 固定到 super View 的底部,则不会显示任何内容。如果我确实将最底部的 View 固定到 super View 的底部,则只有最顶部的 View 会拉伸(stretch)到屏幕的全尺寸。如果我手动将高度限制为任意数量,一切都会好起来的。当然,问题是我实际上不知道高度应该是多少,因为它们会根据内容而变化。

是否有管理可变高度 View 数组的好策略? 另外,我想我需要补充一点, View 的总高度有可能(并且很可能)大于包含这些垂直 View 的 View Controller View 的高度大小。最终我希望能够使用 UIScrollView 滚动它们,但现在它们可以在屏幕外继续。

最佳答案

每个 UIView 都有一个 -(CGSize)intrinsicContentSize 方法。如果您的 View 内容动态变化,您应该覆盖该方法并根据 View 内容返回适当的维度。自动布局使用此信息来计算 View 的高度。您可能必须调用 -(void)invalidateIntrinsicContentSize 让系统知道固有大小已更改。顺便说一句:大多数 Apple 提供的 UIKIT 类已经提供了适当的固有大小。

关于高度未知的 iOS 自动布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17600337/

相关文章:

ios - 在上次提交后立即提交另一个 ipa 文件

ios - 如何将一个 UIWindow 放在另一个 UIWindow 后面?

ios - 自 iOS6 以来,GLKTexture 未正确映射

iphone - 生成错误 : expected a property attribute before 'unsafe_unretained'

iOS:为什么我的 View 需要 x 值约束?

ios - 如何在 ios 运行时禁用约束?

ios - Xcode6:导航栏与文本字段重叠

objective-c - 如何手动改变 body 的特征?

ios - 动态tableHeaderView无法正常工作

ios - 当框架更改时,UIView 背景颜色不会重绘(在动态扩展的 TableViewCell 中)