Я вижу, что это беспокоит многих людей: /
У меня есть UITabBarController, который имеет 4 viewController, все типа UINavigationController.Один из навигационных контроллеров помещает viewController в свой стек, этот viewController должен быть представлен в ландшафтном режиме / ориентации.
viewController - это график, это единственное место в приложении, где ландшафт имеет смысл.(Я скрываю UITabBar, когда он представлен, чтобы пользователь не поверил, что это будет работать везде)
Чтобы UITabBarController правильно реагировал на изменения ориентации, все его viewControllers должны возвращать одно и то же значение из метода делегата:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
Итак, чтобы приспособиться к этому поведению, я реализовал этот метод во всех контроллерах viewController, принадлежащих UITabBarController:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
BOOL canRotate = [defaults boolForKey:@"can_rotate"];
return canRotate;
}
Теперь «трюк» заключается в том, что когда я могу-landscape viewController выдвигается, я делаю это:
- (void) viewWillAppear:(BOOL)animated {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:YES forKey:@"can_rotate"];
[defaults synchronize];
}
, и когда он появляется, я делаю это:
- (void) viewWillDisappear:(BOOL)animated {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:NO forKey:@"can_rotate"];
[defaults synchronize];
}
Это работает очень хорошо.Когда viewController находится в стеке, я могу поворачивать устройство, и представление выглядит следующим образом.
Проблема, однако, заключается в том, что, если пользователь нажимает кнопку «назад» на навигационной панели в режиме ландшафта, таким образом, появляется viewControllerпо сравнению с предыдущим viewController, этот «старый» viewController, конечно, также находится в ландшафтном режиме.Что еще хуже, поскольку я установил для BOOL значение NO, этот «старый» viewController не может повернуться назад, когда я ориентирую устройство в портретный режим.
Есть ли способ обновить все так, чтобы ничегоиз моих других viewController будет в ландшафтном режиме, когда я выхожу из режима can-be-in-landscape в viewController?
Я немного обеспокоен тем, что если это можно сделать из пейзажа в портрет, то это должно такжебыть возможным от портрета до пейзажа, таким образом делая мой "хак" ненужным ... но если это невозможно, то я возвращаюсь к исходной точке: /
Надеюсь, я близко и что кто-то может помочь мне добраться туда,спасибо:)