UITraitCollection и UISplitViewController на iPad

Я разрабатываю приложение для iPad, используя файл UISplitViewController. Я настроил UISplitViewController таким образом, чтобы главный контроллер вида (то есть более тонкий вид слева) всегда был виден через splitViewController.preferredDisplayMode = .AllVisible.

Контроллер подробного представления — это UICollectionView, и я хотел бы изменить способ его отображения в зависимости от того, является ли iPad портретным или альбомным. Если это портрет, я заставлю представление коллекции отображать только один столбец (аналогично UITableView). Если это пейзаж, с более доступным горизонтальным пространством экрана, я буду отображать несколько столбцов. Я подумал, что могу сделать это с помощью нескольких условных операторов в классе, который реализует источник данных и делегат для этого представления коллекции.

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

Я знаю, что каждый контроллер представления имеет свойство traitCollection, но независимо от начальной ориентации iPad, когда я распечатываю это свойство в методе viewDidAppear, он всегда говорит, что контроллер представления _UITraitNameHorizontalSizeClass = Compact, _UITraitNameVerticalSizeClass = Regular.

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

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

Итак, мой вопрос заключается в том, как я могу обнаружить изменения размера класса/признака в контроллерах представления в контроллере разделенного представления... или я делаю это совершенно неправильно?

Для любого примера кода в ответах приложение написано на Swift для iOS 9.

Заранее благодарю за любую помощь!


person Skoota    schedule 01.01.2016    source источник
comment
Привет, ты смог найти решение этой проблемы?   -  person vinnybad    schedule 06.04.2016
comment
К сожалению, пока нет, но я собираюсь поработать над этим на следующей неделе.   -  person Skoota    schedule 07.04.2016


Ответы (1)


Возможно, вы можете попробовать проверить traitCollection из self.splitViewController, используя следующий метод:

private var isCompactOrientation: Bool {
    get {
        return self.splitViewController?.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClass.Compact
    }
}

При использовании self.traitCollection.horizontalSizeClass всегда возвращается .Compact.

person patrick kuang    schedule 30.06.2016
comment
Исходное поведение должно заключаться в том, что разбиение будет производиться по набору признаков для второго столбца и компактному горизонтальному для основного. Я думаю, что ваша догадка неверна. В конце этого URL-адреса: commandshift.co. Великобритания/блог/2016/04/11/ - person Cynichniy Bandera; 22.04.2021