Как создать разные макеты для iPad в альбомном и портретном режимах?

Я работаю над универсальным приложением для устройств iPad и iPhone, которое поддерживает как альбомный, так и портретный режимы. В ландшафтном режиме у него больше кнопок, чем в портретном режиме.

Для iPhone я смог разработать различные макеты с помощью раскадровки, и это работает, как и ожидалось, для wC|hC , wC|hR, wR|hC.

Но в случае iPad я не мог создавать разные макеты, так как классы размеров одинаковы wR | hR как для альбомной, так и для портретной ориентации.

Я упомянул решения, обсуждаемые @Класс определения размеров для портретной и альбомной ориентации iPad Режимы , iPad Landscape и Portrait разные макеты с размером Класс и пытался использовать код ниже:

override func overrideTraitCollectionForChildViewController(childViewController: UIViewController) -> UITraitCollection? {
    if UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Pad &&
        view.bounds.width > view.bounds.height {

        let collections = [UITraitCollection(horizontalSizeClass: .Regular),
                           UITraitCollection(verticalSizeClass: .Compact)]
        return UITraitCollection(traitsFromCollections: collections)

    }
    return super.overrideTraitCollectionForChildViewController(childViewController)
}

Но этот код так и не был вызван. Каким должен быть лучший способ добиться этого?

Повлияет ли программное изменение характеристик для iPad на процесс утверждения приложения, поскольку сама Apple предоставляет тот же размерный класс для iPad в альбомной и портретной ориентации.


person CuriousDev    schedule 20.10.2016    source источник
comment
Вы поместили этот код в «родительский» контроллер представления, который содержит ваш фактический «дочерний» контроллер представления?   -  person Paulw11    schedule 21.10.2016
comment
@Paulw11Paulw11На самом деле у меня есть контроллер/контейнер с одним представлением, содержащий множество кнопок и меток внутри. Я специально не создавал родительские и дочерние представления.   -  person CuriousDev    schedule 21.10.2016
comment
Верно. Это проблема. Я понятия не имею, почему Apple решила, что у iPad должны быть одинаковые черты в обеих ориентациях, кажется, что это полностью противоречит цели черт. В любом случае, вам нужно создать UIViewController с полноэкранным представлением контейнера и поместить ваш фактический контроллер представления в этот контейнер. Поместите приведенный выше код в содержащий контроллер представления, чтобы он обновлял признаки дочернего элемента contained.   -  person Paulw11    schedule 21.10.2016