Я провел небольшое тестирование, и хотя мне не нравится этот метод, его довольно легко сделать.
Ища частный метод, который мог бы сработать, я не смог его найти,Все, что я нашел, было:
@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;
}