2010-06-11 2 views
0

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

Longer версия:
Я строю довольно сложное приложение IPad, включая много взглядов и viewcontrollers. После некоторых трудностей, связанных с ориентацией устройства, я сделал простой проект XCode, чтобы выяснить, в чем проблема.

Во-первых, я прочитал Документы Apple по этому вопросу (небольшой документ под названием "Why won't my UIViewController rotate with the device?"), и хотя я считаю, что он имеет какое-то отношение к одной из причин, перечисленных там, я не совсем уверен, как исправить Это.

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

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

self.newViewController = [[UIViewController новый] autorelease]; [newViewController.view setBackgroundColor: [UIColor yellowColor]]; [self.view addSubview: newViewController.view];

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

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

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

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

+0

У меня такая же проблема, на самом деле мое приложение может работать только в ландшафтном режиме и имеет 3 вида, все настроенные как ландшафт в IB. Первый, загруженный автоматически загружается в правильной ориентации, но если я попытаюсь добавить subview, новый вид будет в портретном режиме. Все еще рытье. – Cesar

+0

возможно связанный с: http://stackoverflow.com/questions/2656088/uiview-added-with-incorrect-orientation/3059099#3059099 – Cesar

ответ

1

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

0

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

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

Смежные вопросы