Сложность с приложениями с принудительной альбомной ориентацией
У меня есть два приложения, каждое из которых заставляет пользователя использовать 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));
}
Кажется, что каждый контроллер представления, который помещается в контроллер навигации, также отображается в альбомной ориентации.