Cocoa-Touch:如何进行布局

时间:2009-11-01 23:22:16

标签: iphone objective-c cocoa-touch

我有一个视图(UIScrollView),它可以加载一些数据,并在各种子视图中显示各种数据。所以我有大约10个子视图(UIImageView, UILabel),我需要以编程方式考虑它们不可预测的内容(即UILabel的不同高度/宽度,取决于文本属性)。

从我读过的内容来看,Cocoa-touch没有布局框架。

这样做的最佳方式是什么?

据我所知,我应该将内容放在视图中,然后在调用sizeToFit方法后开始根据帧来计算坐标。

这种方法非常容易出错。真的没有别的办法吗?

4 个答案:

答案 0 :(得分:6)

你是对的,没有自动布局管理器。对UIScrollView进行子类化并覆盖layoutSubviews可能是实现自定义算法的正确方法。然后,您可以致电setNeedsLayout进行布局。

答案 1 :(得分:3)

Cocoa中的布局通常使用自动调整大小(使用autoresizingMask)来完成。您可以从一些硬编码的初始大小开始,例如200x200;将您的子视图放在此视图上并相应地设置自动调整标记。然后可以将此视图的大小自由调整为其实际大小,由其父视图/窗口确定。无论您使用Interface Builder还是以编程方式执行,该过程都是相同的。

如果您需要垂直堆叠视图,可以使用表格视图。

如果你想要更复杂的布局,你需要自己实现它,覆盖layoutSubviews

答案 2 :(得分:1)

我不知道任何自动布局管理器等。

因此,我认为您必须计算所需的位置和尺寸,并手动更新子视图的frame

编辑:我找到了this question,其中Brad Larson指出了一个自定义布局管理器的示例。 HTH

答案 3 :(得分:-1)

您可以使用Interface Builder创建视图,然后将元素拖放到其中。