Как я могу убедиться, что контроллер представления получает уведомление о поворотах, как обычно, когда он представляет другой контроллер представления?

Я долго искал ответ на этот вопрос, но не нашел ничего подходящего.

В моем приложении у меня довольно сложная иерархия контроллеров представлений с экземпляром ECSlidingViewController в корне. На iPad существуют большие различия между ландшафтным и портретным режимами (например, контроллер, который обычно является корневым контроллером представления моего основного навигационного контроллера, в то время как в портретном режиме он становится контейнером для нового навигационного контроллера, который содержит все остальные контроллеры), поэтому убедитесь, что контроллеры представления правильно уведомлены о поворотах, крайне важно для работы приложения.

Моя проблема связана с модально представленным контроллером представления, потому что, когда пользователь поворачивает устройство, когда такой контроллер виден, мой ECSlidingViewController (ни его контроллер верхнего представления) не вызывает методы didRotateFrom(..) и willRotateTo(..).

Итак, как мне заставить другие контроллеры представления получать уведомления о вращении? (не говоря о прямом вызове didRotateFrom(..) и willRotateTo(..) для них, так как это не изменит их кадры).


person johnyu    schedule 01.04.2014    source источник
comment
Я думаю, вы можете наблюдать UIApplicationWillChangeStatusBarOrientationNotification и самостоятельно реализовывать методы, связанные с вращением (конечно, в родительском контроллере представления, а не напрямую из контроллера модального представления).   -  person ismailgulek    schedule 01.04.2014
comment
Однако, насколько мне известно, он не будет настраивать рамку моего представления ViewController. :(   -  person johnyu    schedule 01.04.2014
comment
Ты прав. Но я не думаю, что есть способ сделать это автоматически. Пожалуйста, дайте нам знать, если вы найдете один.   -  person ismailgulek    schedule 01.04.2014


Ответы (1)


Ваши контроллеры представления не всегда уведомляются, когда происходит вращение, например, в вашем случае.

Но одно всегда называется:

- (void)viewWillLayoutSubviews {
    [super viewWillLayoutSubviews];
}

Здесь вы можете проверить, изменилась ли ваша ориентация, и изменить свой интерфейс в соответствии с ней.

Это то, что я сделал в своем приложении.

person Zoleas    schedule 01.04.2014