2009-09-03 2 views
3

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

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

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

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

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

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

Спасибо.

пс. Это то, что вид выглядит, как если бы я не называю setFrame, как описано выше:

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

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

+0

Я могу подтвердить, что это все еще проблема с iPhone OS 3.1.3. Поскольку у меня есть два случая бесплатной поддержки, включенные в членство в ADC, я подал заявку и сообщаю вам, когда у меня есть новости. –

ответ

0

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

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

+0

UIInterfaceOrientationLandscapeRight s устанавливается в info.plist, поэтому приложение приближается к этой ориентации с самого начала. Все в NIB настраиваются в одной ориентации. Тем не менее, для второго и следующего просмотров должен быть установлен размер их вида, как указано выше, чтобы они отображали их содержимое должным образом. – mahboudz

1

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

+0

Я изменил все мои \t возвращение ((interfaceOrientation == UIInterfaceOrientationLandscapeLeft) || \t \t \t \t (interfaceOrientation == UIInterfaceOrientationLandscapeRight)); , чтобы вернуть НЕТ вместо всех случаев. Приложение отображает все виды в портретном режиме. – mahboudz

+2

Вы не должны возвращать НЕТ для «shouldAutorotate». Возвращение NO означает, что вы не хотите быть в какой-либо ориентации, что невозможно. UIKit запустит предупреждение в консоли, вы должны его проверить. Вместо этого верните YES для ориентации, которую вы хотите. –

1

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

+0

Решение Clay отлично подойдет для меня. –

0

Простой способом, которым я это исправил должны был иметь свой вид корневого контроллера подкласс UINavigationController, а также осуществлять shouldAutorotateToInterfaceOrientation для обработки вида ландшафта ИЭ,

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

Каждого вида контроллер, который проталкивается к навигации контроллеру, кажется, появляется в пейзаж тоже.

 Смежные вопросы

  • Нет связанных вопросов^_^