У меня недавно возникла проблема. Мое приложение iPad каким-то образом предотвращает автоматическое вращение iPad. Мое приложение загружает UISplitView с обоими контроллерами представления, возвращающими YES для shouldAutorotateToInterfaceOrientation :. Я установил свой info.plist, чтобы включить ключ «Поддерживаемые интерфейсы» со всеми четырьмя ориентациями. Однако, когда я запускаю приложение, вращение устройства не приводит к повороту splitView (хотя я получаю UIDeviceOrientationDidChangeNotification). Кроме того, когда я выхожу из своего приложения в другой ориентации, которую он начал на главном экране iPad, он не авторотируется до правильного представления, пока я не поверну его снова без моего приложения. Любые идеи будут высоко оценены ...UiSplitViewController не автородет
ответ
UISplitViewController
- один из самых классных подкласс классов контроля, который мне когда-либо приходилось использовать. Для того, чтобы он работал «отлично», он должен быть единственным корневым представлением в окне вашего приложения. Тем не менее, вы можете обойти это с некоторыми обманами - в моем случае мне нужен был UITabBarController
, по крайней мере, с двумя отдельными UISplitViewController
s в качестве контроллеров представлений - но тогда вам нужно позаботиться о странных случаях, связанных с поворотом, и UISplitViewControllerDelegate
обратные вызовы не срабатывают ,
Здесь надеются, что Apple, делает UISplitViewController
более совместимым с другими компонентами UIKit
в будущем ...
Вы сказали, что ваша первая проблема заключается в том, что UISplitView предотвращает авторотирование. Попробуйте использовать подкласс SplitView вместо этого enbales autorotating:
@implementation SplitViewControllerRotating
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{
NSLog(@"SplitViewControllerRotating shouldAutorotate");
return YES;
}
@end
Вашей вторая проблема звучит странно. Вы сказали, что после выхода из приложения вы должны повернуть, чтобы ваш iPad распознал ориентацию интерфейса. Не могу помочь вам в этом.
У меня была такая же проблема прямо сейчас. Причина заключалась в том, что я случайно добавил еще один вид в окно в дополнение к представлению UISplitViewController. Удаление дополнительного представления заставило его работать.
Установлен ли ваш UISplitViewController в качестве контроллера корневого представления? Если нет, это может быть причиной вашей проблемы. У меня была аналогичная проблема - строка состояния вращалась, но мои детали и основные взгляды оставались бы на месте. Я перестроил представления так, что UISplitViewController был корнем, а затем мое «главное меню» было представлено как контроллер модального представления поверх раскосного представления, и это заставило проблему вращения уйти.
В соответствии с iPad Programming Guide «Вид контроллера разделенного вида всегда должен быть установлен как корневой вид окна вашего приложения».
Надеюсь, это поможет.
Я столкнулся с этой же проблемой, с двумя подчиненными UINavigationControllers. В моем случае поворот начал работать, как только я перевернул shouldAutorotateToInterfaceOrientation: на левом контроллере всегда возвращался «ДА».
Как masterView, так и detailView должны поддерживать YES для любой ориентации, к которой вы пытаетесь повернуть. Если ни один из них не вернет ДА, он не будет вращаться. Я пропустил эту тонкую деталь, мой masterView только поддерживал портрет. Надеюсь, это помогает кому-то другому. – sasquatch
Я нашел, что это отлично работает - при условии, ОБА детей из UISplitViewController
осуществлению shouldAutorotateToInterfaceOrientation
:
I.е, если у вас есть что-то вроде:
MasterViewController *masterViewController = [[MasterViewController alloc] initWithNibName:@"MasterViewController_iPad" bundle:nil];
UINavigationController *masterNavigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController];
DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController_iPad" bundle:nil];
UINavigationController *detailNavigationController = [[UINavigationController alloc] initWithRootViewController:detailViewController];
self.splitViewController.viewControllers = @[masterNavigationController, detailNavigationController];
self.window.rootViewController = self.splitViewController;
, чтобы определить rootViewController
из ваших NSApplication
тогда как MasterViewController
DetailViewController
и должны осуществлять:
(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
return YES;
}
, чтобы обеспечить вращение работы.
- 1. UISplitViewController displayModeButtonItem не отображается
- 2. UISplitViewController не отображается правильно
- 3. UISplitViewController - detailView не показывает
- 4. iOS 8 UISplitViewController не работает
- 5. UISplitViewController presentsWithGesture = YES не работает
- 6. делегат методы UISplitViewController не называется
- 7. Настройка UISplitViewController
- 8. Вид UISplitViewController
- 9. UISplitViewController viewWillDisappear
- 10. UISplitViewController shouldAutorotateToInterfaceOrientation
- 11. popover UISplitViewController
- 12. UISplitViewController landscape
- 13. UISplitViewController detailView
- 14. Пользовательский UISplitViewController
- 15. Альтернатива UISplitViewController?
- 16. UISplitViewController displayModeButtonItem()
- 17. UISplitViewController внутри UINavigationController
- 18. UISplitViewController iOS8 PopToViewController программно
- 19. UISplitviewController и UINavigationController
- 20. UINavigationController с UISplitViewController
- 21. UISplitViewController как цель segue
- 22. Отсутствует UIBarButtonItem в UISplitViewController
- 23. UISplitViewController корректно вращается
- 24. UITabBarController внутри master UiSplitViewController
- 25. UISplitViewController Доля же заголовок
- 26. UIsplitViewController not RootViewController
- 27. UISplitViewController, показывающий серый бар
- 28. UISplitViewController с двумя DetailViewControllers
- 29. Приложение UiSplitViewController без раскадровки
- 30. Загрузка UIViewController из UISplitViewController
Вы можете обойти это с обманом, о котором вы говорите ... Какая обманка? Вы дразните! – radven
То, к чему оно сводилось, просто направило соответствующие методы поворота вручную. Ведение журнала кучей вещей, чтобы узнать, какие методы были, и мы не вызываемся. Затем я просто получил компенсацию в моем подклассе контроллера корневого представления, убедившись, что контроллеры дочерних представлений получили правильные методы, выпущенные, изменили размеры их представлений и т. Д. – LucasTizma
У меня такая же проблема прямо сейчас, когда у меня есть SplitViewController, которые являются вкладками под TabBarController, действовать беспорядочно, поэтому он рад узнать, что это не только я! Благодарим за этот комфорт хотя бы! – Gowiem