1

我想制作一个类似于 Apple 的 Mail App 电子邮件详细信息控制器的 ViewController。有“发件人”、“收件人”等。当我添加新电子邮件时,第一个视图会改变它的大小,堆栈中的所有其他视图也应该改变它们的原点,整个容器视图应该改变它的大小。这个问题有什么漂亮的解决方案吗?请不要将我发送到 Three20 Mail Composer。我已经看过了。我想实现我自己的类似控制器。需要一些代码示例。

4

1 回答 1

3

已经公开宣布 iOS6 将有 AutoLayout - 这基本上是为了解决这种事情而设计的。

对于早期版本,这完全取决于您想要它做什么。在简单的情况下,将所有需要下移的视图一起放到一个空白容器 UIView 中。然后,您可以更改该容器视图并为其设置动画,而不必单独移动每个视图。

如果你有很多移动部件,那么这种方法就不能很好地扩展。在这些情况下,我现在倾向于使屏幕的主容器视图成为自定义子类(与默认的普通 UIView 和在视图控制器中具有布局逻辑相反)。这个视图子类负责根据要显示的内容,以集中的方法在该屏幕上计算出必要的大小和位置。然后可以- layoutSubviews在任何 UIView 动画块中调用该方法。调用它- layoutSubviews意味着它也适用于自转。

至于位置的计算:基本上,从顶部向下工作。对于每个视图,计算它需要多高,到它的下邻居的差距是多少,并y通过这些数字增加运行值。将y下一个视图原点的坐标设置为该运行y值,然后添加高度和边距等。完成后,您应该能够使用最终的 y 值作为滚动视图heightcontentSize包含所有这些视图。

于 2012-08-21T12:12:28.713 回答