2010-02-03 38 views
4

我有UIView一個子類,我已經使用下面的代碼行添加到作爲navigationItemtitleView得到正確的邊界爲navigationItem.titleView layoutSubviews

self.navigationItem.titleView = tempview; 

很容易的。這工作正常。我的問題是,這navigationItem有時有rightBarButton更新(有時沒有按鈕,有時有一個標準尺寸的按鈕,有時會有一個更大的按鈕)。

我想,我可以簡單地使用爲titleView所以我把這個在我已經添加了tempview類的layoutSubviews方法:

-(void)layoutSubviews { 
    [super layoutSubviews]; 
    self.mylabel.frame = self.bounds; 
} 

這似乎並不工作,因爲它不在rightBarButton項目更新時正確調整titleview的大小。

我也注意到邊界一旦變小就不會增長,他們只是改變位置。

我試過使用setNeedsLayoutlayoutIfNeeded,但那些只是「調整」視圖與不正確的界限。

我也確定rightBarButton項目設置爲零,但視圖仍然無法正確展開,一旦收縮。

感謝您的幫助!

回答

0

您試過設置autoresizingMask屬性而不是覆蓋-layoutSubviews嗎?

tempView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
+1

我試過了,它似乎沒有做任何不同於'layoutSubviews'的方法。雖然謝謝! – mjdth 2010-02-04 02:34:27

2

默認情況下,layoutSubviews不執行任何操作。你也永遠不會改變titleView的大小,所以除非導航欄爲你做這件事,否則沒有什麼改變也就不足爲奇了。

由於您只更改其中一個子視圖的大小,因此我不認爲autoresize會起作用,因爲我非常肯定它在超級視圖(啓用了autoresizeubviews的超級視圖)更改大小時觸發。我建議在更改右鍵時重新計算titleview的大小。如果它在第一次添加時自動適應,您可以刪除並讀取它,但我知道這是一個非常醜陋的黑客攻擊。

4

配置與

[self setAutoresizingMask:UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth]; 

(可能在initWithFrame)

你的看法,然後實施

- (void)willMoveToSuperview:(UIView *)newSuperview 
{ 
    [self setFrame:[newSuperview bounds]]; 
} 

現在你有你的觀點相匹配的容器的大小,並自動調整大小。

+0

爲什麼這不被標記爲正確答案?這是一個很棒的提示 - willMoveToSuperview是關鍵 – 2012-12-23 22:34:09