2009-11-01 52 views
4

我有一個視圖(UIScrollView),它加載一些數據,並顯示各種子視圖中的各種東西。所以我有大約10個子視圖(UIImageView, UILabel),我需要以編程方式將它們放入考慮其不可預知的內容(即對於UILabel取決於文本屬性的不同高度/寬度)。可可觸摸:如何做佈局

從我讀過的內容來看,沒有Cocoa-touch的佈局框架。

這樣做的最好方法是什麼?

從我所知道的,我應該把內容放在視圖中,然後在調用它們的sizeToFit方法後根據它們的框架開始計算座標。

這種方法非常容易出錯。真的沒有其他辦法嗎?

回答

6

你是對的,沒有自動佈局管理器。子類UIScrollView和覆蓋layoutSubviews可能是實現您的自定義算法的正確方法。然後您可以致電setNeedsLayout進行佈局。

-1

您可以使用Interface Builder創建視圖,然後將元素拖放到其中。

+1

嘗試在回答前閱讀問題,是的,當我有靜態內容時,IB工作。問題在於當內容是動態時,最好的方式是什麼。 – Prody 2009-11-01 23:35:08

1

我不知道任何自動佈局管理器或類似的東西。

因此,我認爲您必須計算所需的位置和大小,並手動更新子視圖的frame

編輯:我發現this question其中Brad Larson指出了一個自定義佈局管理器的例子。 HTH

3

Cocoa中的佈局通常使用自動調整大小(使用autoresizingMask)完成。你從一些硬編碼的初始尺寸開始,例如200x200;將您的子視圖放置在該視圖上並相應地設置自動識別標誌。這個視圖可以自由調整到其實際大小,由其父視圖/窗口決定。無論您使用Interface Builder還是以編程方式執行,該過程都是相同的。

如果您需要垂直堆棧視圖,則可以使用表格視圖。

如果你想要更復雜的佈局,你需要自己實現它,通過覆蓋layoutSubviews