我是一个新手 iOS 开发人员,我有一个简单的问题,我已经把头发拉了几天。
首先,我没有在 XCode 中使用 Interface Builder,因为有人告诉我最好的学习方法是通过代码来构建所有内容。
话虽如此,我有一个自定义 UIViewController ,我在其中添加 subview 。我的问题是,当它们具有可变高度时,我如何自动“堆叠”它们?我所说的“堆栈”是指以下内容:
|------------------------------------|
| |
| View 1 (variable height) |
| |
|------------------------------------|
|------------------------------------|
| |
| View 2 (variable height) |
| |
|------------------------------------|
|------------------------------------|
| |
| View 3 (variable height) |
| |
|------------------------------------|
现在,一旦所有 subview 都被渲染,我正在计算每个 subview 的重载“sizeToFit”函数中每个 subview 的起点/高度。有些 View 包含 UIWebView,我在其中等待它们加载以计算高度。
有一种更优雅的方法可以做到这一点,不是吗?
任何代码示例将不胜感激!
谢谢你的时间!
最佳答案
使用自动布局!
Auto Layout 所做的是根据您提供的约束为您管理 UI 布局。例如,在上面的 View 层次结构中,您希望对 View 的高度进行约束,并在每个 View 之间进行约束,最后对 View 的 super View 进行约束。
由于您在代码中执行所有操作,因此您要做的第一件事是调用 setTranslatesAutoresizingMaskIntoConstraints:
在每个 View 上,值为 NO
.这告诉布局系统您希望使用自动布局并自己设置所有约束。
接下来,您应该为所有 View 提供约束。约束有多种形式: View 和自身之间的约束(高度、宽度等); View 和对等体之间的约束 - 共享相同 super View 的两个 View 之间的约束;以及 View 与其父 View 之间的约束。自动布局系统不喜欢模棱两可,因此您必须提供没有问题的约束。对于上面的示例,您必须设置每个 View 的高度、它在 super View 中的位置以及一个 View 与另一个 View 之间的距离。
更高级的主题包括固有大小,它会告诉自动布局您的 View 可能会根据其内容动态地增长和缩小,并且其他人也会做出相应的 react 。
定义约束的最简单方法是使用可视化格式。
我建议从这些开始:
关于在代码中做 UI 与 Interface Builder 的一句话。让我告诉你,不要为了 UI 代码而学习 UI 代码。提出一个想法,然后开始实现这个想法。从界面生成器开始。你会慢慢了解 View 是如何工作的,它们是如何布局的,约束是如何工作的,布局引擎是如何使用约束的等等。在 Xcode 5 中,AutoLayout 已经成为一种使用的乐趣,而在 Xcode 5.1 中,事情变得更好了。从 Interface Builder 开始,您最终将获得代码,并随着时间的推移学习完成任务所需的一切。
学习不应该是“哦,我知道如何在代码中添加 View !”;学习应该是“我知道如何解决我必须完成或克服的问题”。如果您的所有任务都可以使用 Interface Builder 工具完成,那就太好了。使用 IB 解决不了的问题?更好的是,现在您正在了解 View 和布局的内部工作原理。
祝你好运!
关于ios - "Stack"UIViewController 中的 UIViews (iOS 7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22236698/