Подтвердить что ты не робот

IPad Пейзаж и портрет различных макетов с классом размера

Как создать экраны iPad Landscape и Portrait с различными макетами с использованием класса Size. Я мог найти только w-регулярный и h-регулярный для обеих ориентаций. Пример: мне нужно выровнять 2 вида по вертикали в портретном и горизонтальном полях с использованием класса размера

4b9b3361

Ответ 1

Наконец, я нашел решение:

if traitCollection.verticalSizeClass == .Regular && traitCollection.horizontalSizeClass == .Regular {

     var orientation:UIInterfaceOrientation = UIApplication.sharedApplication().statusBarOrientation;
     if orientation == UIInterfaceOrientation.LandscapeLeft || orientation == UIInterfaceOrientation.LandscapeRight {
            // orientation is landscape


     }  else {
            // orientation is portrait

     }
}

Ответ 2

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

Однако, пожалуйста, см. этот ответ для другого подхода к адаптации классов размеров для выполнения необходимых действий: fooobar.com/questions/34052/...

Ответ 3

Для Swift 3 он будет выглядеть следующим образом:

override func overrideTraitCollection(forChildViewController childViewController: UIViewController) -> UITraitCollection? {
    if UI_USER_INTERFACE_IDIOM() == .pad &&
        view.bounds.width > view.bounds.height {

        let collections = [UITraitCollection(horizontalSizeClass: .regular),
                           UITraitCollection(verticalSizeClass: .compact)]
        return UITraitCollection(traitsFrom: collections)

    }

    return super.overrideTraitCollection(forChildViewController: childViewController)
}

Он использует wRhC вместо wRhR для устройств iPad в ландшафтном режиме. Поместите этот код в контроллер базового представления, т.е. Это правило будет работать для всех контроллеров, которые были представлены этим. Здесь вы можете добавить дополнительные условия... Например, если вы хотите, чтобы это правило работало только для определенного контроллера вида, ваш оператор if выглядел бы так:

    if UI_USER_INTERFACE_IDIOM() == .pad &&
        childViewController is YourSpecificViewController &&
        view.bounds.width > view.bounds.height {

        let collections = [UITraitCollection(horizontalSizeClass: .regular),
                           UITraitCollection(verticalSizeClass: .compact)]
        return UITraitCollection(traitsFrom: collections)

    }