Автоповорот iPhone только на определенных экранах под контроллером навигации
-
06-07-2019 - |
Вопрос
Это всего лишь пример основной проблемы, с которой я столкнулся, поэтому не беспокойтесь, если эта ситуация звучит немного бессмысленно;)
Допустим, у меня есть приложение, которое в основном представляет собой UINavigationController всего на два уровня. Верхний уровень представляет собой таблицу со списком имен файлов изображений, а второй уровень имеет только UIImageView, показывающий изображение для имени файла, к которому вы прикоснулись.
Кто-нибудь знает, для такого приложения, как это, можно разрешить автоматическую поворот таблицы на верхнем уровне, сохраняя при этом второй уровень изображений фиксированным в портретном режиме?
До сих пор я был в состоянии почти достигнуть этого ... но когда я нажимаю на имя файла в ландшафтном режиме, изображение скользит в неправильной ориентации, даже если на контроллере представления второго уровня shouldAutorotateToInterfaceOrientation возвращает yes только для портрета режимы. р>
Решение
Проблема в том, что если вы используете автоматическое вращение, весь пользовательский интерфейс (включая, я полагаю, экземпляр UIWindow) поворачивается.
Все, что будет вставлено в контроллер навигации в этот момент, будет выполнено в альбомной ориентации.
Поэтому, когда вы нажимаете на изображение, это именно то, что вы получаете.
Чтобы это сработало, вам нужно:
<Ол>В любом случае, вам нужно выполнить преобразования вручную, чтобы заставить это работать. Р>
Как примечание, это может быть плохой дизайн пользовательского интерфейса. Как пользователь, я ожидаю, что при просмотре изображений изображения будут видны справа вверх. Но это без знания точного контекста вашего приложения.
Другие советы
В iPhone OS 2.x не было хорошего способа сделать это, но в 3.0 они значительно улучшили его.
В 2.x метод делегата shouldAutorotateToInterfaceOrientation:
выполнялся только для изменений в ориентации, поэтому вы получите описанное вами поведение: если его повернуть в другом контроллере вида он останется повернутым во время толчков и толчков, даже если новый контроллер представления не поддерживает вращение в этой ориентации.
В версии 3.0 UINavigationController опрашивает shouldAutorotateToInterfaceOrientation:
при каждом нажатии или выталкивании и подчиняется тому, что вы ожидаете, например: если вы в данный момент поворачиваетесь в альбомной ориентации влево, и вы нажимаете экземпляр контроллера представления, который поддерживает только книжную ориентацию через shouldAutorotateToInterfaceOrientation:
, он автоматически и мгновенно переворачивает логическую ориентацию и перемещает в новом представлении правильный путь в книжной ориентации.
Обратите внимание, что это будет работать только для приложений, связанных с (и поэтому требующих) 3.0. Для приложений, связанных с 2.x, он будет эмулировать старое поведение.