Модальное всплывающее окно iOS в ошибке ландшафтного позиционирования?

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

  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.

альтернативный текст


person crayment    schedule 16.12.2010    source источник


Ответы (3)


Заметив, что представление имеет правильный кадр в 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_];
}

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

person crayment    schedule 16.12.2010

  [self presentModalViewController:vc animated:YES];  

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

person Manjunath    schedule 16.12.2010
comment
Это исправляет рамку, но, к сожалению, не решает мою проблему. Я делаю несколько пользовательских анимаций в модальных окнах viewDidAppear, которые сильно задерживаются, если модальное анимируется. - person crayment; 16.12.2010

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

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

Вы можете смоделировать многое из этого в Interface Builder, нажав стрелку в строке заголовка представления.

person Stephen Darlington    schedule 16.12.2010
comment
В построителе интерфейсов все работает нормально (используя маленькую стрелку). Попробуйте сами с моей загрузкой. Представление имеет стандартную для представления маску автоматического изменения размера — в построителе интерфейса все красное. Он также отлично работает, если вы поворачиваете в альбомную ориентацию после представления модального окна. - person crayment; 16.12.2010