我有一個UIView的子類,需要根據它的寬度計算它的高度。當在代碼中創建一切正常。但是,當我嘗試在「界面」構建器中創建視圖時,儘管我重寫了所有相關的方法,但我無法獲取在界面構建器中設置的視圖的大小。從NIB大小問題加載UIView子類
- (id)initWithCoder:(NSCoder *)aDecoder
{
NSLog(@"init with coder before super width %d",super.frame.size.width); // returns 0
self = [super initWithCoder:aDecoder];
NSLog(@"init with coder after super width %d",super.frame.size.width); // still returns 0
}
- (void) awakeFromNib
{
NSLog(@"width of view %d",super.frame.size.width); // Returns 0 as well
}
- (void) setFrame:(CGRect)aFrame
{
[super setFrame:aFrame]; // Called from initWithCoder by super. Correct frame size.
}
所以我的下一個猜測是我的視圖的超級視圖可能是在awakeFromNib之後設置我的視圖的框架。事實證明它不是。我在我的視圖上覆蓋了setFrame,並在initWithCoder中調用它。
所以這是我所知道的,到目前爲止:
- 第一的initWithCoder叫
- 的initWithCoder月至SETFRAME一個電話:(的CGRect)AFRAME在框架的SETFRAME大小發送
- 正確的,我調用[超級SETFRAME:AFRAME]
- awakeFromNib稱爲
- super.frame.size.width =在awakeFromNib self.frame.size.width 0也0
- 當這個過程完成後,它看起來像是在它假設的下面幾個像素,但我想我的代碼得到如此緊湊的尺寸,它可能是我做的。
如果擴展initWithCoder
,一定要調用父類方法的任何幫助將不勝感激
的問題其實是完全錯誤的現在。我發佈了一個由於某種原因被刪除的答案。我的主要錯誤是使用%d在浮動時打印幀大小。這完全把我扔了。就我所見,我沒有做的事情,你的回答實際上並沒有做任何事情。 – 2014-04-01 16:47:36