2012-05-31 63 views
1

我知道我必須使用-sizeThatFits:方法並在superView中覆蓋它。但是,這個方法該怎麼辦?我應該只計算我的視圖的新大小,或者我應該發送一些消息到它的子視圖?也許-sizeToFit:和-sizeToFit:消息?而且,何時以及如何向我的superView「說」是時候調整其框架?如何調整UIView以適合其子視圖?

回答

2

關於您的問題的第一部分:您的-sizeThatFits:實現不應該在子視圖上調用-sizeToFit:。前者是一種方法,以爲基礎計算您的視圖的大小(根本不改變它),而後者實際上是更改您的視圖的大小。

您可以絕對地將-sizeThatFits:調用轉發給您的子視圖,如果這有助於視圖的大小計算。

關於您的問題的第二部分:您應該不會告訴您的超級視圖何時調整視圖的大小,通常情況下。它應該是相反的:一個控制器或父視圖應該是首先嚐試調整您的子視圖的大小。

從蘋果公司的文檔:sizeThatFits - Implement this method if you want your view to have a different default size than it normally would during resizing operations. For example, you might use this method to prevent your view from shrinking to the point where subviews cannot be displayed correctly.

什麼文檔說的是,如果你-sizeThatFits:實現永遠不會返回低於某一尺寸的框架:即規模將基本成爲在大小調整操作您的視圖的最小尺寸。

PS:,因爲你的問題的話題你問如何調整,以便適應它的內容 - 你應該使用sizeToFit用於這一目的。您需要爲自定義視圖自己實現該方法。

+1

這是正確的。除非像UIKit控件那樣在'-init'中設置合理的默認值,否則您不應該真正設置自己的框架。視圖控制器設置您的框架,並在調用時將所有內容放在'-layoutSubviews'中。如果父母想知道給定高度或寬度需要多大,則實現sizeThatFits。在'-layoutSubviews'和'-sizeThatFits'之間共享代碼就是事情發生的地方。 –

+0

謝謝!但是,如果我調整我的subView與動畫_(調整在subView方法。我想要創建自定義視圖,這將是我的子視圖,包含UILabelView和UITableView下面的標籤,這將改變其行數)_,我應該發送消息 - sizeToFit到它的superView畢竟? – BergP

+0

不,視圖不應直接瞭解其超視圖(或發送消息) - 這將是一個糟糕的設計選擇。你能澄清你的意思嗎「如果我調整我的subView動畫」?更具體地說:你會爲此目的調用什麼方法,以及消息的發送者是什麼對象? – diegoreymendez