Изменение размера UINavigationBar при вращении
-
22-07-2019 - |
Вопрос
У меня есть подкласс UIViewController, который обрабатывает UIView.Контроллер представления представлен модально (он выдвигается вверх из нижней части экрана).В верхней части представления я добавил панель навигации.Обратите внимание, что эта панель не обрабатывается контроллером навигации.
Я хочу, чтобы панель навигации уменьшалась по высоте, когда представление поворачивается в горизонтальное положение (аналогично тому, как она ведет себя, когда она обрабатывается UINavigationController).Однако я не могу установить гибкую высоту маски автоматического изменения размера в IB, и если сделать это в коде, навигационная панель полностью исчезнет.
Есть ли способ сделать это?Как это делает UINavigationController?
P.S.Я бы предпочел не прибегать к преобразованию масштабирования, поскольку это испортило бы текст в заголовке.
РЕДАКТИРОВАТЬ:Я решил это с небольшой помощью, прочитайте ответ, опубликованный ниже.
Решение 2
Я нашел решение и, оглядываясь назад, чувствую себя довольно глупо.Мне просто нужно было включить гибкое нижнее поле в маску автоматического изменения размера навигационной панели.Благодарность принадлежит пользователю RayNewbie в этой теме, который указал мне на решение:
Другие советы
Вместо того, чтобы устанавливать маску автоматического изменения размера, почему бы вам просто не проверить текущую ориентацию в viewWillAppear, а также в DidRotateFromInterfaceOrientation, и установить соответствующий кадр?
- (void) updateNavBar {
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
if ((UIInterfaceOrientationLandscapeLeft == orientation) ||
(UIInterfaceOrientationLandscapeRight == orientation)) {
myNavBar.frame = CGRectMake(0, 0, 480, 34);
} else {
myNavBar.frame = CGRectMake(0, 0, 320, 44);
}
}
- (void) viewWillAppear {
[self updateNavBar];
// ... SNIP ...
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
[self updateNavBar];
// ... SNIP ...
}