При добавлении вложенного представления размер не изменяется, если приложение находится в ландшафтном режиме. - PullRequest
1 голос
/ 02 марта 2011

У меня есть представление, которое было создано в Интерфейсном Разработчике и настроено для изменения размера в соответствии с ориентацией.Если представление создается и добавляется на дисплей, когда приложение находится в портретном режиме, все работает отлично.Затем я могу повернуть устройство / симулятор, и вид изменится, как я и ожидал.Но, если представление добавляется, когда приложение находится в альбомном режиме, оно изменяется неправильно.Вид создается и имеет размеры, как будто приложение все еще находится в портретном режиме.Вид дополнен следующим кодом:

self.viewController = [[MyViewController alloc] initWithNibName:nibName bundle:bundle];
[self addSubview:self.viewController.view];

Ничего волшебного здесь не происходит.Кроме того, контроллер представления указывает:

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}

Опять же, он работает, как и ожидалось, пока представление добавляется в портретном режиме.Я пробовал несколько разных вещей, включая ручную установку свойства autoresizingMask в представлении, вызов setNeedsLayout и вызов layoutIfNeeded, но, похоже, ничего не работает.Я могу вручную установить ширину и высоту фрейма, чтобы заставить размер окна изменить размер, но это нарушает динамический характер вида.Например, если я вручную установлю ширину, высота не будет изменена, так как содержимое не будет перекомпоновано.

Есть идеи?

Ответы [ 4 ]

5 голосов
/ 23 сентября 2013

Просто установите рамку подпредставления следующим образом

self.viewController.view.frame = self.view.bounds;
0 голосов
/ 14 мая 2011

Я только что опубликовал ответ на этот вопрос почти на идентичный вопрос. Проверьте UIView добавляет Subview после изменения ориентации

0 голосов
/ 25 февраля 2013

Это должно произойти, вы просто добавляете представление одного контроллера представления в другой. Это плохая практика и может привести к исключению внутренней несогласованности. См. Контейнер Api vedio из WWDC. Для такой вещи используются api.

Но вы все еще хотите сделать это таким образом. После добавления представления вам нужно вызвать shouldAutorotateToInterfaceOrientation для self.viewController

0 голосов
/ 22 марта 2011

Быстрый ответ, хотя, думаю, вы уже решили это :). Причина в том, что когда вы создаете и добавляете вид, он загружается из пера с рамкой для портрета.При загрузке он не поворачивается автоматически, поскольку в этот момент приложение не может знать, что вы хотите повернуть его.

Некоторые параметры включают в себя:

  1. При добавлении вида имейте перо «Портрет» и «Пейзаж» и загружайте его с соответствующего кончика в зависимости от текущей ориентации.

  2. Настройте код после загрузки, как вы это делали ранее.

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

HTH

...