实现一堆可以改变大小的视图

时间:2012-08-21 11:56:13

标签: objective-c ios uiview uiviewcontroller

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

1 个答案:

答案 0 :(得分:3)

已公开宣布iOS6将具有AutoLayout - 这基本上是为解决此类问题而设计的。

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

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

至于处理职位:基本上,只是从顶部向下工作。对于每个视图,计算它需要多高,与其较低邻居的差距是什么,并按这些数字递增运行y值。将下一个较低视图的原点的y坐标设置为正在运行的y值,然后添加高度和边距等。完成后,您应该是能够使用最终的y值作为滚动视图的height的{​​{1}},可能包含所有这些视图。