Вопрос

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

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

Это было полезно?

Решение

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

Ищете частный метод, который, возможно, сработал, я не мог найти его. Все, что я нашел, было:

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

Другие советы

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

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

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

Благодаря Joost я добавил

@property BOOL forceFullHeightInLandscape;

на мой пользовательский класс Uinaviginbar. И установить:

-(id)initWithFrame:(CGRect)frame{
forceFullHeightInLandscape = YES;

Работал как шарм

Похож на ответ Joost, но положить метод в willAnimateRotationToInterfaceOrientation имеет лучший эффект анимации, чем willRotateToInterfaceOrientation. Отказ (Нет задержки анимации)

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    [self.navigationBar sizeToFit];
}

Я только что имел эту ошибку, и хотя это, вероятно, не по той же причине, по которой я хотел бы опубликовать его здесь, чтобы помочь кому-либо еще, что Goofs.

Если вы переопределите все willRotateToInterface методы, Не забудьте позвонить super

Я очаровал на этом, но однажды я увидел принятый ответ, это пришло ко мне.

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

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

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

(void)viewWillLayoutSubviews {
      self.navigationItem.titleView.bounds = self.navigationController.navigationBar.bounds;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top