Я пишу приложение для iPhone, которое (как и большинство приложений) поддерживает автоповорот: вы поворачиваете свой телефон, и его представления вращаются и изменяют размер соответствующим образом.
Но я назначаю настраиваемое представление для navigationItem.titleView
(область заголовка панели навигации), и я не могу заставить это представление правильно изменять размер при повороте телефона.
Я знаю, что вы думаете: «Просто установите для его autoresizingMask
значение UIViewAutoresizingF flexibleWidth | UIViewAutoresizingF flexibleHeight
», но это не так просто. Конечно, если я не установил для своего представления autoresizingMask
, то размер моего представления не изменится; и я хочу, чтобы он изменил размер.
Проблема в том, что если я действительно установил его autoresizingMask
, то он изменит размер правильно, пока вид виден; но размер titleView
неверен в этом сценарии:
[self.navigationController pushViewController: someOtherViewController animated: YES]
. Если вы хотите воспроизвести это самостоятельно, выполните следующие действия (это небольшая работа):
Включите этот код как в контроллер представления верхнего уровня, так и в контроллер представления подробностей:
- (BOOL) shouldAutorotateToInterfaceOrientation:
(UIInterfaceOrientation) interfaceOrientation {
return (interfaceOrientation! = UIInterfaceOrientationPortraitUpsideDown);
}
Включите этот код только в контроллер представления верхнего уровня:
- (void) viewDidLoad {
[супер viewDidLoad];
// Создаем кнопку "Назад"
UIBarButtonItem * backButton = [[UIBarButtonItem alloc] initWithTitle: @ "Мастер"
стиль: UIBarButtonItemStylePlain цель: ноль действие: ноль];
self.navigationItem.backBarButtonItem = backButton;
[отпускание backButton];
// Создаем вид заголовка
UILabel * titleView = [[[UILabel alloc] initWithFrame: CGRectMake (0,0,500,38)] автозапуск];
titleView.textAlignment = UITextAlignmentCenter;
titleView.text = @ "Посмотреть этот заголовок";
// Если я оставлю включенной следующую строку, то изменение размера окна заголовка
// испортится, если я:
//
// 1. Начнем с основного представления (которое использует это представление заголовка) в портретной ориентации
// 2. Перейдите к подробному просмотру
// 3. Поверните телефон в горизонтальное положение
// 4. Вернемся к основному представлению
// 5. Верните телефон в вертикальное положение.
//
// С другой стороны, если я удалю следующую строку, я получу другую
// проблема: размер окна заголовка меняется не так, как я хочу, когда я:
//
// 1. Начнем с основного представления (которое использует это представление заголовка) в портретной ориентации
// 2. Поверните телефон в горизонтальное положение
titleView.autoresizingMask = UIViewAutoresizingF flexibleWidth | UIViewAutoresizingF flexibleHeight;
self.navigationItem.titleView = titleView;
}
Наконец, следуйте моим инструкциям по воспроизведению.
Итак ... я что-то делаю не так? Есть ли способ заставить мой titleView всегда правильно изменять размер?