Сложность с приложениями с принудительной альбомной ориентацией

У меня есть два приложения, каждое из которых заставляет пользователя использовать iPhone в альбомном режиме, чтобы иметь более широкий экран вместо более высокого.

Одна из вещей, которые я обнаружил, заключается в том, что мой первый вид будет выглядеть нормально, но все другие виды будут отображаться со своими подпредставлениями (UIButtons, UIPicker, UIViews), сжатыми в одну сторону или обрезанными (в зависимости от того, были ли установлены элементы для перемещения, изменения размера или оставайтесь в той же позиции, что и размер вида. Все мои взгляды оформлены в IB в альбомной ориентации. Основное окно UIWindow и все, что я могу придумать, выложено в альбомной ориентации. Даже в моем файле plist установлен флаг UIInterfaceOrientationLandscapeRight.

Теперь, если я загружаю все свои представления одновременно с моим контроллером rootview, то у меня нет проблем. Но если у меня загружаются представления позже, они обрезаются или сжимаются.

Единственный способ обойти эту проблему - добавить в мой код следующую строку, которая переворачивается в новом представлении:

[coming.view setFrame:CGRectMake(0, 0, 480, 300)];

Кто-нибудь знает, почему мне нужно это сделать? Просто iPhone предполагает, что загруженные просмотры имеют размер 300x480, если к ним не применено преобразование?

Благодарю.

пс. Вот как будет выглядеть представление, если я не вызову setFrame, как описано выше:

http://files.me.com/mahboud/ljhvun

Все контроллеры представления, которые загружаются после первого, будут сжимать свой экран аналогичным образом. По некоторым причинам первый viewcontroller не имеет этой проблемы.

4 ответа

У меня была похожая проблема, я задал вопрос по SO, а потом понял и сам ответил. Вы можете проверить это.

Я думаю, что вы хотите использовать ландшафтный режим в каждом представлении вашего приложения. И вы хотите, чтобы перо тоже было в ландшафтном режиме. Вы можете изменить размер представления (0,0,480,300 для строки состояния, 320 для строки без статуса) в кончике. И дизайн, что вы хотите. Наконец, в поле зрения контроллера возвращается no для автоматического поворота. И, наконец, преобразовать вид и повернуть.

Правильный ответ будет зависеть от знания того, как вы форсируете альбомную ориентацию. Если вы делаете это через UIViewController и компании, это должно быть относительно просто; для других методов, вероятно, более сложный.

В простом случае вы должны иметь возможность переопределить shouldAutorotateToInterfaceOrientation: на вашем контроллере представления, настройте ваши представления в Интерфейсном Разработчике, и установите UIInterfaceOrientation ключ к UIInterfaceOrientationLandscapeRight в вашем Info.plist и будет установлен.

Простым способом, которым я это исправил, было использование моего подкласса контроллера корневого представления UINavigationController и реализация shouldAutorotateToInterfaceOrientation для обработки ландшафтного вида, т.е.

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return ((interfaceOrientation == UIInterfaceOrientationLandscapeLeft) ||
            (interfaceOrientation == UIInterfaceOrientationLandscapeRight));
}

Кажется, что каждый контроллер представления, который помещается в контроллер навигации, также отображается в альбомной ориентации.

Другие вопросы по тегам