UISplitViewController: как предотвратить расширение при повороте с компактного на обычный
Существует множество ответов на дополнительный вопрос: как предотвратить переход к PrimaryOverLay
на от Regular
в Compact
изменение интерфейса, например, использование
func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool
В моем случае у меня есть iPhone 6+ с подробным изображением в портретной ориентации. Когда я поворачиваю устройство в горизонтальное положение (Compact
в Regular
), Я хочу, чтобы основной вид был скрыт. Я пытался установить preferredDisplayMode
в .PrimaryHidden
во многих местах, но это не имеет видимого влияния. Поиск в Google ничего не дал.
1 ответ
Что ж, после того, как я написал вопрос, но перед тем, как опубликовать его, я остановился на возможном решении, которое заключается в переопределении коллекции признаков, на которую ссылается контроллер разделенного представления.
Я взял эту идею и решил подкласс UISplitViewController
и переопределить traitCollection
имущество. Это сделало трюк:
final class MySplitViewController: UISplitViewController {
var didOnce = false
override var traitCollection: UITraitCollection {
let old = super.traitCollection
let change = UITraitCollection(horizontalSizeClass: .Compact)
let new = UITraitCollection(traitsFromCollections: [old, change])
return new
}
Очевидно, что это жестко запрограммировано для одного устройства - позже я пойду и добавлю некоторые функции, которые я могу использовать для контроля того, что на самом деле возвращается.
Не отменять traitCollection
, вместо этого используйте метод setOverrideTraitCollection:forChildViewController:
в родительском контроллере представления вашего разделенного контроллера, как в примере Apple AAPLTraitOverrideViewController.m
Если у вашего сплит-контроллера нет родителя, создать родителя в раскадровке очень просто. Добавьте новый контроллер представления, сделайте его точкой входа, добавьте представление контейнера, удалите встроенное представление по умолчанию и вместо этого добавьте встраиваемый переход к разделенному контроллеру и установите переопределение наself.childViewControllers.firstObject
в viewDidLoad
.