didRotateFromInterfaceOrientation: не вызывается для контроллера, который представил модальный контроллер на iOS 5 - PullRequest
4 голосов
/ 14 января 2012

Существует контроллер представления (назовем его родительским), который представляет другой контроллер представления (назовем его модальным) с presentModalViewController:animated:, и затем устройство поворачивается. Оба контроллера поддерживают все ориентации. Вот что происходит:

  1. Сразу после вращения модальный контроллер получает didRotateFromInterfaceOrientation:
  2. Непосредственно перед удалением модального контроллера родительский контроллер также получает didRotateFromInterfaceOrientation:. НО, это происходит, только если базовый SDK установлен на 4,3 (или ниже). Если для базового SDK установлено значение 5, родительский контроллер НЕ получает это сообщение. В 4.3 я обновил родительский интерфейс в соответствии с новой ориентацией в didRotateFromInterfaceOrientation:, и он был показан правильно после скрытия модального контроллера, но в iOS 5 он не вызывается, и родительский интерфейс портится после скрытия модального контроллера.

Итак, что я должен сделать, чтобы должным образом обновить интерфейс родительского контроллера до новой ориентации, если устройство поворачивается, когда виден модальный контроллер?

Ответы [ 2 ]

1 голос
/ 17 января 2012

Я сталкивался с подобной проблемой в этом.Мое решение состояло в том, чтобы переместить мой код обработки ориентации в отдельный метод и вызвать оба метода ротации и viewWillAppear:

//.h
@interface SomeViewController

- (void)layoutForInterfaceOrientation:(UIInterfaceOrientation)orientation;

@end


//.m
@implementation SomeViewController


- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    UIInterfaceOrientation currentOrientation = [[UIApplication sharedApplication] statusBarOrientation];
    [self layoutForInterfaceOrientation:currentOrientation];
}

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toOrientation duration:(NSTimeInterval)duration {

    [self layoutForInterfaceOrientation:toOrientation];
}

- (void)layoutForInterfaceOrientation:(UIInterfaceOrientation)orientation {

    // layout views
}

@end
0 голосов
/ 30 июля 2012

Это может решить проблему.У меня это сработало:

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