Авторазмер UINavigationBar

В моем приложении я получил UINavigationController. К сожалению, когда я поворачиваю устройство и ориентация интерфейса меняется, UINavigationBar не меняет свою высоту. В других приложениях для iPhone, таких как Contacts.app, панель навигации в ландшафтном режиме становится немного менее высокой. Он должен быть встроенным, потому что если вы возьмете пример приложения навигации из меню XCode и добавите в него ориентацию интерфейса, он корректно изменяет высоту панели навигации.

Как я могу изменить размер панели навигации, как во всех других приложениях для iPhone, которые я видел?

12
задан Peter Hosey 22 August 2010 в 04:41
поделиться

4 ответа

Я провел небольшое тестирование, и хотя мне не нравится этот метод, его довольно легко сделать.

Попробовав приватный метод, который мог бы сработать, я не смог его найти. Все, что я нашел, это:

@property BOOL forceFullHeightInLandscape;

- (BOOL)isMinibar;

Нет установщика для -isMinibar, поэтому мы не можем его установить. Я предполагаю, что он возвращает значение, основанное на его высоте. Кроме того, для forceFullHeightInLandscape было установлено значение NO, однако высота по-прежнему не настраивалась.

При изменении autoresizingMask для включения UIViewAutoresizingFlexibleHeight размер представления действительно уменьшался, но теперь он был слишком маленьким. Однако -isMinibar неожиданно вернул YES. Так что это заставило меня подумать о том, чтобы просто изменить размер представления, отрегулировав его до нужной высоты.

Итак, начнем, метод, который работает даже без частных вызовов API:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    [self.navigationBar performSelector:@selector(sizeToFit) withObject:nil afterDelay:(0.5f * duration)];
}

Одна вещь, с которой вам придется столкнуться, это то, что представления под панелью не будут подстраиваться под меньшую панель, так что между панелью и представлениями ниже будет зазор. Самый простой способ решить эту проблему — добавить представление контейнера, как в случае с UINavigationController. Вы бы придумали что-то вроде:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    [self performSelector:@selector(resizeViewsForNavigationBar) withObject:nil afterDelay:(0.5f * duration)];
}

- (void)resizeViewsForNavigationBar {
    [self.navigationBar sizeToFit];

    // Resize containerView accordingly.
    CGRect containerViewRect = self.containerView.frame;
    containerViewRect.origin.y = CGRectGetMaxY(self.navigationBar.frame);
    containerViewRect.size.height = CGRectGetMaxY(self.view.frame) - containerViewRect.origin.y;
    self.containerView.frame = containerViewRect;
}
19
ответ дан 2 December 2019 в 06:07
поделиться

Я думаю, что это похоже на вас, и у них есть фрагмент кода:

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

0
ответ дан 2 December 2019 в 06:07
поделиться

Я думаю, что поведение, которое вы хотите, происходит только тогда, когда контроллер навигации (который представляет панели (навигацию или панель инструментов)), добавляется в окно в делегате приложения или представлен панелью вкладок, и Т. Д.

Вы можете добавить навигационную панель с помощью IB или кода, это не означает, что у вас есть навигационный контроллер. Мое мнение таково: создайте навигационный контроллер и инициализируйте его с помощью контроллера представления, в котором вы работаете. Вероятно, когда представление вращается, панель навигации немного сжимается, как вам нравится.

Надеюсь, это поможет

2
ответ дан 2 December 2019 в 06:07
поделиться

Я только что попробовал кое-что только в Interface Builder и Xcode, и пока вы используете UINavigationBarController как RootViewController, он работает, как описано, — становится меньше. Изменили ли вы что-нибудь в самом контроллере или в части загрузки контроллера? Особенно по поводу стрельбы событиями? У меня был плохой опыт работы с UITabBarController с точки зрения нарушения правильного обмена сообщениями, и я получил некоторые «интересные» побочные эффекты просмотра. Просто попытка и предположение.

0
ответ дан 2 December 2019 в 06:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: