Добавление UIViewController.view в другое представление вызывает проблемы с ориентацией - PullRequest
0 голосов
/ 11 июня 2010

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

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

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

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

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

self.newViewController = [[UIViewController new] autorelease]; [newViewController.view setBackgroundColor: [UIColor yellowColor]]; [self.view addSubview: newViewController.view];

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

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

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

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

Ответы [ 2 ]

1 голос
/ 17 июня 2010

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

0 голосов
/ 18 января 2013

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

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

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