UISplitViewController - это контейнерный контроллер, предназначенный для отображения двух панелей интерфейса (master-detail) с возможностью адаптации под разные размеры экранов и ориентации устройства. Основные характеристики:
Вот минимальный пример настройки:
class MainSplitViewController: UISplitViewController {
override func viewDidLoad() {
super.viewDidLoad()
let primaryVC = PrimaryViewController()
let secondaryVC = SecondaryViewController()
viewControllers = [
UINavigationController(rootViewController: primaryVC),
UINavigationController(rootViewController: secondaryVC)
]
// Современные настройки
preferredDisplayMode = .oneBesideSecondary
showsSecondaryOnlyButton = true
primaryBackgroundStyle = .sidebar
}
}
// Управление отображением
var preferredDisplayMode: UISplitViewController.DisplayMode
var preferredSplitBehavior: UISplitViewController.SplitBehavior
// Контроллеры
var viewControllers: [UIViewController]
var primaryViewController: UIViewController?
var secondaryViewController: UIViewController?
// Стили
var primaryBackgroundStyle: UISplitViewController.BackgroundStyle
var preferredPrimaryColumnWidthFraction: CGFloat
// Делегат
weak var delegate: UISplitViewControllerDelegate?
.oneBesideSecondary
- заменил .allVisible
.secondaryOnly
- только детальный вид.oneOverSecondary
- primary поверх secondary.tile
- классическое разделение.overlay
- secondary поверх primary.displace
- secondary сдвигает primaryИнтеграция с новым UICollectionView
sidebar style:
if let nc = primaryViewController as? UINavigationController {
nc.navigationBar.prefersLargeTitles = true
nc.navigationItem.largeTitleDisplayMode = .always
}
Улучшенная адаптация для iPhone:
splitViewController(_:topColumnForCollapsingToProposedTopColumn:)
Поддержка многозадачности на iPad:
preferredDisplayMode
в зависимости от контекстаUISplitViewControllerDelegate
для тонкой настройки поведенияПример делегата:
extension MainSplitViewController: UISplitViewControllerDelegate {
func splitViewController(
_ svc: UISplitViewController,
topColumnForCollapsingToProposedTopColumn proposedTopColumn: UISplitViewController.Column
) -> UISplitViewController.Column {
// Кастомная логика для compact режима
return .primary
}
func splitViewController(
_ svc: UISplitViewController,
displayModeForExpandingToProposedDisplayMode proposedDisplayMode: UISplitViewController.DisplayMode
) -> UISplitViewController.DisplayMode {
// Настройка при переходе в regular ширину
return .oneBesideSecondary
}
}
UISplitViewController - мощный инструмент для создания адаптивных интерфейсов, особенно на iPad. Современные изменения (iOS 14+) сделали его более гибким и удобным, с улучшенной поддержкой sidebar стиля и адаптацией под разные размеры экранов.