7

我正在研究可在兩種方向(縱向和橫向)下工作的iPhone應用程序。iPhone:帶按鈕的UINavigationBar - 調整高度

我使用嵌入在UINavigationController中的一個視圖和tableview。此導航欄及其按鈕的高度爲:44px縱向或34px橫向。

在不同的視圖中,我自己創建了UINavigationBar,並且能夠設置正確大小的框架,但嵌入的帶有UIBarButtonItem的UINavigationItem不會收縮。因此,對於風景模式下的34像素,此按鈕很大並且與高度上的導航欄重疊。

有趣的是,這與其他應用程序中的相同代碼一起工作......不知道它不在這裏。

有無論如何調整UIBarButtonItem的高度/位置嗎?

這裏是代碼片段:

navBar = [[UINavigationBar alloc] initWithFrame: CGRectMake(0.0f, 0.0f, 320.0f, 34.0f)]; 
[navBar setBarStyle: UIBarStyleBlackOpaque]; 

[self addSubview: navBar]; 

barButton = [[UIBarButtonItem alloc] initWithTitle: NSLocalizedString(@"flip", @"flip") style:UIBarButtonItemStylePlain target:self action:@selector(flip)]; 

item = [[UINavigationItem alloc] initWithTitle: NSLocalizedString(@"Translation", @"Translation Tab Bar Title")]; 
[item setRightBarButtonItem: barButton]; 
[navBar pushNavigationItem:item animated:NO]; 

alt text http://labs.kiesl.eu/images/navbar.png

由於

湯姆

回答

0

創建備用圖像,並且在該處理動畫的旋轉視圖控制器的方法,改變圖像欄中的按鈕項目。或者,您可以使用UIImageView作爲項目中的自定義視圖,並設置其內容模式以縮小圖像。

7

我想通了:導航欄的高度必須是32像素!用33或34像素對齊螺絲向上。

+0

非常有幫助,謝謝。 32px是關鍵。我使用的是34像素,它不起作用。 – lambmj 2012-01-04 14:33:58

4

這是我寫的基於crashtesttommy的答案代碼:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return YES; 
} 

- (void) correctNavBarHeightForOrientation:(UIInterfaceOrientation)orientation { 
    // This is only needed in on the iPhone, since this is a universal app, check that first. 
    if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone){ 
     if (UIInterfaceOrientationIsLandscape(orientation)) { 
      self.navBar.frame = CGRectMake(self.navBar.frame.origin.x, self.navBar.frame.origin.y, self.navBar.frame.size.width, 32.0f); 
     } else { 
      self.navBar.frame = CGRectMake(self.navBar.frame.origin.x, self.navBar.frame.origin.y, self.navBar.frame.size.width, 44.0f); 
     } 
    } 
} 

- (void) viewWillAppear:(BOOL)animated { 
    [self correctNavBarHeightForOrientation:[UIApplication sharedApplication].statusBarOrientation]; 
} 

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
    [self correctNavBarHeightForOrientation:toInterfaceOrientation]; 
}