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.

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

1 ответ

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

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

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

Другие вопросы по тегам