Поворот, влияющий на панель навигации непредсказуемо - PullRequest
1 голос
/ 18 февраля 2009

Вот мои настройки: один навигационный контроллер, два вида

Первый вид, корневой вид, отображает строку состояния и панель навигации (книжная ориентация). Когда rootviewController определяет вращение, он скрывает панель навигации и строку состояния, а затем помещает представление 2 на контроллер навигации (теперь в альбомной ориентации).

Эта часть работает как положено.

Когда View2-контроллер View2 обнаруживает поворот (обратно в портрет), он вырывается из контроллера навигации, открывая представление 1. View 1, затем отображает строку состояния и панель навигации. Отсюда становится странно. В зависимости от того, когда я показываю панель навигации, я получаю странные результаты. Как вы можете видеть ниже (фотография мензурки должна быть чуть ниже навигационной панели в верхней части экрана).

Я попытался показать панель навигации в:

  • viewWillRotate / viewDidRotate для просмотра 2
  • viewWillAppear / viewDidAppear of view 1
  • poptoRootView в контроллере навигации (я подкласс только для того, чтобы попробовать)

Ничего не работает. Любая идея, что происходит? Это должно быть просто, но, возможно, я делаю вещи не в тех местах.

botched screen

Ответы [ 3 ]

0 голосов
/ 18 февраля 2009

Не уверен, почему это необходимо, но когда вы меняете представления, вы должны применить преобразование к своему виду (только один вид iPhone делает это за вас), и вы должны установить границы этого.

Вот код, который должен работать для вас (на willAnimateFirstHalfOfRotationToInterfaceOrientation):

#define degreesToRadians(x) (M_PI * (x) / 180.0)
if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) {
    self.view = landscapeView;
    self.view.transform = CGAffineTransformIdentity;
    self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(90));
    self.view.bounds = CGRectMake(0.0, 0.0, 480.0, 320);

} else {
    self.view = portraitView;
    self.view.transform = CGAffineTransformIdentity;
    self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(0));
    self.view.bounds = CGRectMake(0.0, 0.0, 300, 480);
}
0 голосов
/ 20 февраля 2009

В конце концов, я переработал свое приложение. (использовать контроллер модального вида)

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

Я думаю, что обе проблемы можно объяснить тем, что при вращении / изменении размеров видов не разговаривали с контроллером навигации (вместо этого я разговаривал с ViewController.

Подробнее о том, как я решил проблему:

iPhone + CGAffineTransFormRotate (pi / 2) + statusBarHidden: YES + presentModalViewController = 20 пикселей пробела

0 голосов
/ 18 февраля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...