2011-11-27 67 views
5

創建自定義視圖,它分配給navigationItem.titleView屬性後它顯示這樣如何確定自定義UINavigationItem.titleView的大小/框架?

enter image description here

與填充所述兩個按鈕之間的空間中的自定義視圖。因此,自定義視圖不在導航欄上居中。如何確定.titleView屬性中的視圖框架?我想在導航欄中放置一些文本,在時間戳下說。

回答

14

如果你真的想要得到titleView的框架(在你的頂層視圖的座標空間),你可以這樣做:

[self.navBar layoutIfNeeded]; 
CGRect titleViewFrameInTopLevelViewSpace = [self.navigationItem.titleView 
    convertRect:self.navigationItem.titleView.bounds 
    toView:self.view]; 

你需要做layoutIfNeeded如果剛分配titleView,因爲默認情況下導航欄不會佈局它的子視圖,直到下一次通過運行循環。

也就是說,titleView將自動居中,如果它適合。我認爲你正在設置你的自定義視圖的框架(或界限)太大。我測試了這兩種方法:

  • 我直接在XIB中設置titleView。我只是拖從對象庫中查看到導航欄的中心:
    XIB screen shot
    它自動調整大小的視圖128x33。調整大小手柄讓我調整大小。它保持居中,直到與Categorize按鈕重疊。然後它向左移動。

  • 我設置titleView財產viewDidLoad

    - (void)viewDidLoad 
    { 
        [super viewDidLoad]; 
        UIView *customView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 33)]; 
        customView.backgroundColor = [UIColor greenColor]; 
        self.navItem.titleView = customView; 
    } 
    

    結果看起來是這樣的:
    Simulator screen shot

+0

感謝羅布。這是導致觀點不被集中的原因。 – ChrisP

2

設置後,您可以獲得leftBarButtonItemrightBarButtonItem的寬度,然後使用該寬度確定如何在您提供給titleView的視圖中居中。那可能會做你想要的?