iPhone: UINavigationBar с кнопками - отрегулируйте высоту - PullRequest
7 голосов
/ 25 октября 2009

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

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

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

Спасибо

Tom

Ответы [ 3 ]

7 голосов
/ 26 октября 2009

Я понял: высота панели навигации должна быть 32 px! С 33 или 34 px выравнивающие винты вверх.

4 голосов
/ 04 января 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];
}
0 голосов
/ 25 октября 2009

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

...