2009-12-01 129 views
7

我有一個處理UIView的UIViewController的子類。視圖控制器以模態方式呈現(它從屏幕底部向上滑動)。在視圖的頂部,我添加了一個導航欄。請注意,此欄不是由導航控制器處理的。旋轉調整UINavigationBar的大小

我想讓導航欄在視圖旋轉到橫向時縮小高度(類似於UINavigationController處理它時的行爲)。但是,我無法在IB中將自動調整大小的遮罩設置爲靈活的高度,並且在代碼中這樣做會導致導航欄完全消失。

有沒有辦法做到這一點?它如何通過UINavigationController完成?

P.S.我寧願不必訴諸於縮放轉換,因爲這會弄亂標題中的文字。

編輯:我解決了它的一點幫助,閱讀下面發佈的答案。

回答

1

我找到了解決方案,事後看來我覺得很愚蠢。我只需在導航欄的自動調整大小掩碼中包含靈活的底部邊距。信用是由於用戶RayNewbie在這個線程,它向我指出瞭解決方案:

http://discussions.apple.com/thread.jspa?messageID=8295525

+0

嗨,你有沒有在導航欄上的按鈕?因爲我遇到同樣的問題,並且如果我在導航欄的自動調整大小掩碼中包含靈活的底部邊距,則導航欄會調整大小,但不是按鈕。 – Sefran2 2011-02-21 19:47:00

+0

確保添加navBar.autoresizesSubviews = YES ;,並且您可能還需要爲導航欄按鈕設置自動識別掩碼 – 2012-08-02 23:09:27

+1

您是否會發布您的解決方案。您提供的鏈接已損壞。 – DCorrigan 2014-09-20 13:09:49

5

爲什麼不直接在viewWillAppear以及didRotateFromInterfaceOrientation中檢查當前的方向,並設置相應的框架?

- (void) updateNavBar { 
    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 
    if ((UIInterfaceOrientationLandscapeLeft == orientation) || 
     (UIInterfaceOrientationLandscapeRight == orientation)) { 
     myNavBar.frame = CGRectMake(0, 0, 480, 34); 
    } else { 
     myNavBar.frame = CGRectMake(0, 0, 320, 44); 
    } 
} 
- (void) viewWillAppear { 
    [self updateNavBar]; 
    // ... SNIP ... 
} 
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { 
    [self updateNavBar]; 
    // ... SNIP ... 
} 
+0

我給它一個嘗試,但它並沒有表現我想它的方式。更具體地說,酒吧按鈕項目和標題沒有規模,所以頂部屏幕。此外,導航欄本身並未實際縮放,所以漸變已關閉。我會嘗試做一些手動調整的子視圖,看看它是否工作... – 2009-12-03 07:02:24

+0

我試過使用不同種類的變形ob子視圖,但我無法讓它看起來不錯。 – 2009-12-03 07:30:32