как установить autoresizingmask для иерархии представлений, созданной программно

Я работаю над CatalogueViewController, который содержит представление прокрутки, которое программно заполняется последовательностью PageViewController. Это старый код, в котором все построено программно для iPad только для портретного просмотра. Кроме того, содержимое каждого PageVC строится программно, а некоторые пользовательские UIView добавляются программно во время выполнения (это означает, что каждое представление, созданное и вставленное в VC, имеет жестко закодированный фрейм).

Теперь мне нужно включить альбомную ориентацию, чтобы каждая страница теперь имела «автоматическое изменение размера», чтобы заполнить половину экрана iPad (чтобы я мог одновременно видеть 2 страницы в альбомной ориентации и 1 страницу в портрет).

Я изучил множество ссылок об автореразмере, таких как эта, это и это среди прочих.

Тогда я подумал, что рабочим решением могла бы быть вставка следующего кода в -(void)viewDidLoad, -(void)viewWillAppear:(BOOL)animated, -(void)viewDidAppear:(BOOL)animated моего PageViewController

    [self.view setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)];
    for(UIView* subview in self.view.subviews)
        [subview setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)];

и (просто чтобы быть уверенным) также следующее в основных пользовательских представлениях (во многих функциях), которые добавляются в PageViewController (те, которые придают ему реальную визуальную структуру)

    for(UIView* subview in self.subviews)
        [subview setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)];
    [self setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)];

Но это не работает... Пожалуйста, обратите внимание, что CatalogueViewController НЕ имеет активного автомакета, PageViewController не имеет xib и каждого большого пользовательского представления (как я уже сказал, добавленного в представление страницы, чтобы дать основную структуру для PageViewController) имеет xib с НЕ активным автомакетом.

не понимаю в чем разница

  1. с активным автомакетом или нет в моем PageViewController (VC внутри представления прокрутки, которое находится внутри CatalogueViewController)? Я думаю не должно быть активным, но я не знаю, почему
  2. установить autoresizingmask до или после назначения кадра подвиду, который будет добавлен в PageViewController?

для пункта 2 обратите внимание, что когда PageViewController выделен (но он все еще пуст), я применяю к нему фрейм, который является правильным (полная страница или половина страницы) в зависимости от ориентации устройства и что после поворота я повторно исправить кадр каждого PageViewController.

большое спасибо всем заранее


person ddb    schedule 07.07.2016    source источник