2012-09-22 85 views
3

我的應用程序有一個59(虛擬)像素高的自定義導航欄,與標準Apple UINavigationController UINavigationBar的44像素相反。我的應用程序在啓動時將造型與下面的調用酒吧:自定義UINavigationBar高度:如何調整內容視圖?

UIImage *navBarImage = [UIImage imageNamed:@"navigation-bar.png"]; 
[[UINavigationBar appearance] setBackgroundImage:navBarImage 
            forBarMetrics:UIBarMetricsDefault]; 

這導致的問題是,它基本上是在標準的導航欄的原點在屏幕的頂部圖像耳光。底層導航欄不知道它的大小已經改變。這使得內容視圖(視圖壓入導航堆棧)在自定義欄下顯示15個像素。

我找不到改變UINavigationController's navigation view大小和位置的方法。

什麼是這種定製最優雅的會計方法?以下(不優雅)的作品,但因爲操作視圖已經被渲染後應用,位置和大小調整的轉變是對用戶非常明顯,看起來很業餘:

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    CGRect frame = self.view.frame; 
    self.view.frame = CGRectMake(frame.origin.x, frame.origin.y + 15, frame.size.width, frame.size.height - 15); 
} 

所有的控制器推到導航堆棧上的是實現上述方法的UIViewController的子類。

感謝一大堆!

回答

5

我知道這是舊的,但既然你從來沒有得到答案,我想我可能會發布我是如何解決這個問題的。

我發佈了一個類似的問題,但除了你的問題還有其他問題。我被指向a question on how to set the height of a UINavigationBar,最佳答案對我來說非常合適。用戶建議創建一個自定義的UINavigationBar類並覆蓋-sizeThatFits方法。它解決了您的應用程序無法識別UINavigationBar的增加高度的問題,以及UINavigationBar中的視圖的額外問題在默認44px底線以下不可點擊。

+0

感謝您的迴應!我們最終做的是確保我們所有的xib的起點都是從15開始而不是0,儘管它在任何方面都不夠優雅,但它似乎經受了迄今爲止的時間考驗。很高興有一個不那麼痛苦的方式,我們必須嘗試一下! –

+0

我的錯。其實這個工程:) –