iPhone: UINavigationBar с кнопками - регулировка высоты

Я работаю над приложением для iPhone, которое работает в обеих ориентациях: портретной и альбомной.

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

В другом представлении я создал 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];   

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

Спасибо

Том


person crashtesttommy    schedule 25.10.2009    source источник


Ответы (3)


Я разобрался: высота панели навигации должна быть 32 пикселя! При 33 или 34 пикселях выравнивание ухудшается.

person crashtesttommy    schedule 26.10.2009
comment
Очень полезно, спасибо. 32 пикселя были ключевыми. Я использовал 34px, и это не сработало. - person lambmj; 04.01.2012

Вот код, который я написал на основе ответа 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];
}
person lambmj    schedule 04.01.2012

Создайте альтернативные изображения и в методах контроллера представления, которые обрабатывают анимацию вращения, измените изображения в элементах кнопок панели. Или вы, вероятно, можете использовать UIImageView в качестве настраиваемого представления в вашем элементе и установить его режим содержимого для уменьшения изображения.

person Sixten Otto    schedule 25.10.2009