Я пишу приложение для iPhone, которое (как и большинство приложений) поддерживает автоматическое вращение: вы поворачиваете свой телефон, и его виды вращаются и изменяются соответствующим образом.iOS: название панели навигации не изменяется правильно, когда телефон вращается
Но я назначаю пользовательский вид navigationItem.titleView
(область заголовка панели навигации), и я не могу получить это представление для правильного изменения размера, когда телефон вращается.
Я знаю, что вы думаете: «Просто установите его autoresizingMask
на номер UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight
», но это не так просто. Конечно, если я не установлю свой вид autoresizingMask
, то мое представление не изменится; и я хочу, чтобы он изменил размер.
Проблема в том, что если я сделал, установите его autoresizingMask
, после чего он будет правильно изменен, пока вид будет виден; но размер titleView
в этом случае перепутался:
- Запуск приложения с телефоном в портретном режиме. Все выглядит хорошо.
- Сделайте что-то, что заставляет приложение нажать другой вид на стек навигации. Например. щелкните строку или кнопку таблицы, которая вызывает вызов
[self.navigationController pushViewController:someOtherViewController animated:YES]
. - При просмотре детского контроллера поверните телефон в альбомную.
- Нажмите кнопку «Назад», чтобы вернуться к просмотру верхнего уровня. На этом этапе вид заголовка перепутался: хотя вы держите телефон в альбомном режиме, название заголовка по-прежнему имеет размер, как если бы вы держали его в портретном режиме.
- Наконец, поверните телефон обратно в портретный режим. Теперь ситуация становится еще хуже: название названия сокращается в размере (поскольку панель навигации уменьшилась), но поскольку она уже была слишком маленькой, теперь это много слишком мало.
Если вы хотите воспроизвести это самостоятельно, выполните следующие действия (это немного работы):
- сделать приложение с помощью «Навигация на основе приложений» мастера Xcode в.
- Установите его так, чтобы в верхнем уровне таблицы были строки, которые при нажатии на них нажимают подробный вид на стек навигации.
Включите этот код в обоих контроллере представления верхнего уровня и контроллер представления детали:
- (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); }
включить этот код в только контроллере представления верхнего уровня:
- (void)viewDidLoad { [super viewDidLoad]; // Create "Back" button UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Master" style:UIBarButtonItemStylePlain target:nil action:nil]; self.navigationItem.backBarButtonItem = backButton; [backButton release]; // Create title view UILabel* titleView = [[[UILabel alloc] initWithFrame:CGRectMake(0,0,500,38)] autorelease]; titleView.textAlignment = UITextAlignmentCenter; titleView.text = @"Watch this title view"; // If I leave the following line turned on, then resizing of the title view // messes up if I: // // 1. Start at the master view (which uses this title view) in portrait // 2. Navigate to the detail view // 3. Rotate the phone to landscape // 4. Navigate back to the master view // 5. Rotate the phone back to portrait // // On the other hand, if I remove the following line, then I get a different // problem: The title view doesn't resize as I want it to when I: // // 1. Start at the master view (which uses this title view) in portrait // 2. Rotate the phone to landscape titleView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; self.navigationItem.titleView = titleView; }
Наконец , следуйте моим инструкциям по воспроизведению.
Итак ... я делаю что-то неправильно? Есть ли способ сделать мой TitleView всегда правильно измененным?
Взял ваш код точно, и он отлично работает для меня, спасибо! – esilver
Возможно, я опоздал (4-5 лет LOL), но могу ли я спросить ... в AutoLayout ... это все еще не изменилось? Я работаю со Storiesboards и UINavigationControllers, когда я устанавливаю действительно длинный заголовок (скажем ... 100 символов и более), при повороте iPhone он работает хорошо, но в какой-то момент он просто сохраняет размер ландшафта для заголовка, когда поворачивается на портрет. Я не знаю, что делать. Без персонализации (перетаскивание контроллера Navcontroller + Root view без пользовательских классов) это все еще происходит. Это сводит меня с ума, похоже на ошибку iOS ... –