7

Я работаю над приложением iPhone, которое работает в обеих ориентациях: портрет и пейзаж.iPhone: UINavigationBar с кнопками - регулировка высоты

Я использую для одного вида и стола, встроенного в UINavigationController. Высота этой навигационной панели с ее кнопками: либо 44px, либо 34px.

В другом виде я создал UINavigationBar самостоятельно, и я могу установить фрейм для правильного размера, но встроенный UINavigationItem с UIBarButtonItem не сжимается. Таким образом, для 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 px! С 33 или 34 px выравнивание закручивается.

+0

Очень полезно, спасибо. 32px был ключевым. Я использовал 34px, и это не сработало. – lambmj

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]; 
}