Приложение для iPhone работает в альбомном режиме, но границы просмотра по-прежнему остаются портретными

StackOverflow https://stackoverflow.com/questions/1416990

  •  06-07-2019
  •  | 
  •  

Вопрос

Что на самом деле происходит за кадром, когда вы устанавливаете ориентацию телефона в альбомный режим?Когда я проследил границы главного экрана и любого вложенного представления, ширина и высота по-прежнему равны 320x480, а не 480x320.

Есть идеи, почему?

Это было полезно?

Решение 6

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

Быстрая трассировка преобразования представления дает мне следующее:

2012-01-31 12:19:02.114 TestScollviewRotation[9834:207] orientation: UIDeviceOrientationPortrait
2012-01-31 12:19:02.116 TestScollviewRotation[9834:207] 0.000000 -1.000000 1.000000 0.000000

2012-01-31 12:21:41.898 TestScollviewRotation[9834:207] orientation: UIDeviceOrientationPortraitUpsideDown
2012-01-31 12:21:41.898 TestScollviewRotation[9834:207] 0.000000 1.000000 -1.000000 0.000000

2012-01-31 12:21:58.780 TestScollviewRotation[9834:207] orientation: UIDeviceOrientationLandscapeRight
2012-01-31 12:21:58.780 TestScollviewRotation[9834:207] 1.000000 0.000000 -0.000000 1.000000

2012-01-31 12:19:03.181 TestScollviewRotation[9834:207] orientation: UIDeviceOrientationLandscapeLeft
2012-01-31 12:19:03.181 TestScollviewRotation[9834:207] 1.000000 0.000000 -0.000000 1.000000

Другие советы

Проверяете ли вы свойство bounds или свойство frame? Некоторые элементы управления, особенно UIViews, которые заполняют экран, по-видимому, поддерживают один и тот же кадр в любой ориентации; Я думаю, что AppKit устанавливает их свойство transform для поворота их содержимого.

Вероятно, вы обнаружите, что свойство bounds имеет значение, которое вы ожидаете большую часть времени, а свойство frame - нет.

Это большая тема, но я добавлю то, что составляет 0,02;комментарии ограничены изменениями между книжной и альбомной ориентацией;то есть, не такие вещи, как перевернутый, лицом вверх, лицевой стороной вниз и неизвестный.

  1. Если вид не отслеживает изменения ориентации, то рамка и границы останутся неизменными независимо от ориентации.

  2. Если представление зарегистрировалось для прослушивания изменений ориентации, то границы могут изменение;т.е. в альбомной ориентации весь кадр экрана равен <320,480> в то время как границы равны <480,320>.Это предполагает:

    a.вы либо используете обратный вызов shouldAutorotateToInterfaceOrientation с соответствующими возвращаемыми значениями YES, либо

    b.явная регистрация в центре уведомлений для прослушивания UIDeviceOrientationDidChangeNotification.

  3. Подход 2a будет иметь значение true только для представлений, принадлежащих корневому контроллеру представления окна приложения;то есть контроллер представления, чье представление было добавлено первым.Подход 2b может быть использован в сочетании с аффинными преобразованиями и руководство пользователя границы изменяются, чтобы получить правильную ориентацию для видов, не регулируемых авторотированием.

Я обнаружил, что если вы не используете UINavigationController, у вас могут возникнуть проблемы с тем, что вашему представлению не дают правильное представление и границы кадра.

Я непосредственно добавлял представления в окно UIWindow, и у меня возникла именно эта проблема. Но когда я поместил UINavigationController между UIWindow и UIViews, проблема исчезла.

Надеюсь, это поможет

Да, рамка и границы остаются прежними, вы должны проверить свойство interfaceOrientation в ViewController и соответственно обработать ширину и высоту, если ваш макет зависит именно от них.

В настоящий момент у меня та же проблема с приложением для iPad.

Я " решен " это путем запроса представлений interfaceOrientation, и если это UIDeviceOrientationPortrait или UIDeviceOrientationPortraitUpsideDown, тогда я вручную устанавливаю рамку моего подслоя в представлении (которое является CAGradientLayer).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top