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
,