Ошибка авторазмера в модальном NavigationController - PullRequest
0 голосов
/ 27 мая 2011

Я искал Stackoverflow и гуглил до тех пор, пока я не покраснел, и до сих пор не могу разобраться с этим ...

У меня есть не слишком сложное приложение: контроллер панели вкладок, содин из корневых контроллеров представления для вкладки, являющийся UINavigationController.Несколько обычных VC, которые я написал, помещаются на этот контроллер навигации обычным способом.Один из этих VC имеет кнопку UIB, которая представляет модальное диалоговое окно , и именно здесь у меня возникают проблемы.

Вот иллюстрация, которая поможет проиллюстрировать:

UITabBarController
  \---- Tab1 root VC: UINavigationController
       \---- Nav root VC: UIViewController
            \---- ...onto which we push: UIViewController
                 \---- ... on which we present modally: UINavigationController
                      \---- Nav root VC: UIViewController

Модальное диалоговое окно - это UINavigationController, а для rootViewController у меня есть простой VC, в котором представлен один UIView.Мой VC поддерживает альбомную ротацию (чего не делает остальная часть приложения, поэтому стратегия представляет его как модальный).

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

Я проверил и дважды проверил - все мои autoresizeMasks выглядят правильно, флаги autoresizesSubviews выглядят правильно, нигде не установлено странных вставок, мой UINavigationControllerНе делаю ничего интересного, например, установив полупрозрачный стиль панели навигации.

Я воссоздаю ситуацию в новом тестовом приложении, но опускаю UITabBarController в верхней части иерархии, и все ведет себя как положено.

Ответы [ 2 ]

0 голосов
/ 27 мая 2011

Исправлено!

Вот в чем проблема:

Я использую MBProgressHUD , чтобы показать счетчик прогресса поверх вида в моем модале.Так что в viewDidLoad у меня было:

[self.navigationController.view addSubview:progressHUD];

Добавление этого компонента HUD к этому виду приводило к искажению изменения размера при вращении;если я вместо этого сделаю следующие вещи снова работать:

[self.view addSubview:progressHUD];
0 голосов
/ 27 мая 2011

Одним из важных моментов, связанных с UITabBarController, является то, что он может поддерживать автоповорот, только если все его представления также работают.Этот SO ответ может помочь найти выход.

С другой стороны, высота строки состояния для UINavigationController изменяется между двумя режимами, поэтому вам придется настроитьдля него:

 CGRect frame = self.navViewController.navigationBar.frame;
 if (toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
    frame.size.height = 44;
 } else {
    frame.size.height = 32;
 }
 self.navViewController.navigationBar.frame = frame;

РЕДАКТИРОВАТЬ: Если это не сработает, вы можете попытаться принудительно изменить ориентацию устройства следующим образом:

[[UIDevice currentDevice] setOrientation:UIDeviceOrientationLandscapeRight];

возможно, это сделает ваше главное окноизменить размер панели навигации.

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