iOS модальный поповер в баге позиционирования? - PullRequest
1 голос
/ 16 декабря 2010

У меня странные проблемы с представлением модальных представлений в альбомной ориентации. Проблему можно воссоздать, просто запустив новое приложение на основе представления и выполнив следующие действия:

  1. Создайте новый подкласс UIViewController, который будет представлен. Я назвал мой ModalViewController. Измените цвет фона представлений, чтобы сделать ошибку более заметной.

  2. return YES; в обоих контроллерах shouldAutorotateToInterfaceOrientation:

  3. Добавьте IBAction к основному виду, чтобы отобразить модальный режим, и подключите это действие к кнопке на контроллере основного вида.

    - (IBAction)showModal {  
      ModalViewController *vc = [[ModalViewController alloc] initWithNibName:@"ModalViewController" bundle:nil];  
      [self presentModalViewController:vc animated:NO];  
      [vc release];  
    }
    

Теперь, когда вы нажимаете кнопку в ландшафтном режиме, вы должны увидеть проблему. Весь вид смещен вверх и влево.

Кто-нибудь еще испытывает эту проблему или есть какие-то обходные пути? У меня похожие проблемы на iPad.

alt text

Ответы [ 3 ]

1 голос
/ 16 декабря 2010

Заметив, что представление имеет правильный кадр в viewDidAppear и что-то испортилось спустя некоторое время, я решил исправить это, реализовав следующее в ModalViewController. Предполагается, что CGRect переменная экземпляра с именем frame_.

- (void)viewDidAppear:(BOOL)animated {
  [super viewDidAppear:animated];
  frame_ = [[self view] frame];
  [self performSelector:@selector(fixFrame) withObject:nil afterDelay:0];
}

- (void)fixFrame {
  [[self view] setFrame:frame_];
}

Я бы сказал, что это ошибка.

0 голосов
/ 16 декабря 2010

Какую маску авторазмера вы используете? (Вы будете устанавливать это в файле XIB.) Похоже, он не прикреплен к правой стороне экрана.

Кроме того, ваш взгляд учитывает размер строки состояния? (Я отмечаю, что разрыв внизу очень похож на размер строки состояния.)

Многое из этого можно смоделировать в Интерфейсном Разработчике, нажав стрелку в строке заголовка представления.

0 голосов
/ 16 декабря 2010
  [self presentModalViewController:vc animated:YES];  

Вместо отключения анимации попробуйте включить анимацию.

...