Добавление UIViewController.view в другое представление вызывает проблемы с ориентацией

Краткая версия:
Я выделяю / инициализирую / сохраняю новый UIViewController в одном методе UIViewControllers viewDidLoad, добавляя новое представление в self.view. Обычно это работает, но, похоже, это мешает обработке изменения ориентации моего приложения для iPad.

Более длинная версия:
Я создаю довольно сложное приложение для iPad, включающее множество представлений и контроллеров представлений. Столкнувшись с некоторыми трудностями при адаптации к ориентации устройства, я сделал простой проект XCode, чтобы выяснить, в чем проблема.

Во-первых, я прочитал Apple Docs по этой теме (небольшой документ под названием «Почему мой UIViewController не вращается вместе с устройством?»), и хотя я действительно считаю, что это как-то связано с одной из перечисленных здесь причин, я не совсем уверен, как это исправить.

В моем тестовом проекте у меня есть appDelegate, rootViewController и UISplitViewController с двумя настраиваемыми viewController. Я использую кнопку на rootViewController, чтобы переключиться на splitViewController, а оттуда я могу использовать кнопку, чтобы переключиться обратно на rootViewController. Пока все отлично, т.е. все виды подстраиваются под ориентацию устройства.

Однако в правом viewController splitViewController я использую метод viewDidLoad для инициализации некоторых других viewController и добавления их представлений в собственное представление:

self.newViewController = [[новый UIViewController] автозапуск]; [newViewController.view setBackgroundColor: [UIColor yellowColor]]; [self.view addSubview: newViewController.view];

Здесь все идет не так. Почему-то после добавления этого вида настройка ориентации устройства становится беспорядочной. При запуске все в порядке, после того, как я переключаюсь на splitViewController, все по-прежнему в порядке, но как только я переключаюсь обратно на rootViewController, все кончено. Я пробовал (почти) все, что касается сохранения и освобождения контроллера просмотра, но, похоже, ничего не исправляет.

Как видно из приведенного выше кода, я объявил newViewController как свойство, но то же самое происходит, если я этого не сделаю.

Разве я не должен вообще добавлять представление ViewController к моему собственному представлению? Это действительно испортит мой проект, так как у меня много viewController'ов, выполняющих самые разные вещи.

Любая помощь по этому вопросу будет принята с благодарностью...


person Bob Vork    schedule 11.06.2010    source источник
comment
У меня та же проблема, на самом деле мое приложение может работать только в ландшафтном режиме и иметь 3 представления, все настроены как ландшафтные в IB. Первый, загружаемый автоматически, загружается в правильной ориентации, но если я попытаюсь добавить подвид, новый вид будет в портретном режиме. Все еще копаю.   -  person Cesar    schedule 17.06.2010
comment
возможно в связи с: stackoverflow.com/questions / 2656088 /   -  person Cesar    schedule 17.06.2010


Ответы (2)


У меня была та же проблема, швы устранены путем удаления из родительского представления опции «автоизменить размер подпредставления» в IB.
Выберите вид, а затем: Инспектор -> Атрибуты (первая вкладка) -> рисунок.

person Cesar    schedule 17.06.2010

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

Я не могу сказать, но я думаю, что вы хотите создать UIView и добавить его в свой старый контроллер представления вместо того, чтобы создавать UIVIewController и добавлять его представление.

person mahboudz    schedule 17.01.2013