UISplitViewController 是 UIKit 中的一个非常实用的控制器,它是用于在 iPad 及 iPhone Plus 等大屏幕设备上实现主从布局的关键控件。本文将从多个方面探讨 UISplitViewController 的使用方法以及注意事项。
一、使用 UISplitViewController 的基本步骤
1、创建 UISplitViewController 对象及其子控制器
func configureSplitViewController() {
let masterViewController = MasterViewController()
let detailViewController = DetailViewController()
let splitViewController = UISplitViewController()
splitViewController.viewControllers = [masterViewController, detailViewController]
splitViewController.preferredDisplayMode = .allVisible
splitViewController.delegate = self
window?.rootViewController = splitViewController
}
2、设置 UISplitViewController 的 viewControllers
属性
在创建 UISplitViewController 后,需要设置它的 viewControllers
属性,将左边的导航控制器(或主控制器)和右边的详细控制器(或从控制器)添加进去。
3、设置 UISplitViewController 的 preferredDisplayMode
属性
preferredDisplayMode
属性决定了在何种情况下显示导航栏。通过设置 preferredDisplayMode
属性,可以实现选择在横屏时始终显示导航栏,在竖屏时只显示按钮的效果。
4、设置 UISplitViewController 的 delegate
属性
UISplitViewController 需要实现 UISplitViewControllerDelegate
协议才能响应相关事件。常见的事件有:将要隐藏从控制器、将要显示从控制器、将要隐藏主控制器等。
二、使用 UISplitViewController 的注意事项
1、UISplitViewController 只适用于 iPad 或 iPhone Plus 等大屏幕设备。在 iPhone 或其他小屏幕设备上,UISplitViewController 会自动转换为 UINavigationController 的形式。
2、在 UISplitViewController 中,主控制器的宽度始终不变,而从控制器可以根据屏幕的宽度自动调整宽度,保证主控制器和从控制器的宽度比例协调。
3、在横屏显示时,UISplitViewController 通常显示导航栏,而在竖屏显示时通常只显示按钮,当用户点击按钮时,会呈现出从控制器的内容。
4、在 iOS 14 中,苹果推出了 columnLayoutAppearance
属性,该属性可以设置控制器在列布局(SplitView)中的外观。可以设置背景颜色、tintColor、文字等相关属性。
if #available(iOS 14.0, *) {
let appearance = UISplitViewController.ColumnDisplayMode.oneBesideSecondary
splitViewController.preferredSplitBehavior = .tile
splitViewController.primaryBackgroundStyle = .sidebar
splitViewController.columnLayout = .twoColumns
splitViewController.primaryEdge = .trailing
let appearance = UISplitViewControllerColumnLayoutAppearance()
appearance.backgroundColor = .white
appearance.trailingAccessory = .outlineDisclosureOptions
splitViewController.primaryColumnWidth = 320
splitViewController.secondaryColumnWidth = .flexible
splitViewController.secondaryBackgroundStyle = .sidebar
splitViewController.secondaryBackgroundStyle = .none
splitViewController.columnLayoutAppearance = appearance
}
三、显示、隐藏从控制器
1、在 splitViewController(_:willHide:with:)
中实现从控制器的显示
当从控制器即将隐藏时,可以在 splitViewController(_:willHide:with:)
中实现从控制器的显示。
func splitViewController(_ splitViewController: UISplitViewController, willHide secondaryViewController: UIViewController, with coordinator: UISplitViewControllerCoordinator) {
// 显示从控制器
}
2、在 splitViewController(_:willShow:with:)
中实现从控制器的隐藏
当从控制器即将显示时,可以在 splitViewController(_:willShow:with:)
中实现从控制器的隐藏。
func splitViewController(_ splitViewController: UISplitViewController, willShow secondaryViewController: UIViewController, with coordinator: UISplitViewControllerCoordinator) {
// 隐藏从控制器
}
四、调整主控制器和从控制器的大小
通过设置 UISplitViewController 的 primaryColumnWidth
、minimumPrimaryColumnWidth
、maximumPrimaryColumnWidth
、secondaryColumnWidth
等属性,可以实现主控制器和从控制器的大小调整。
if #available(iOS 14.0, *) {
splitViewController.primaryColumnWidth = 320
splitViewController.minimumPrimaryColumnWidth = 200
splitViewController.maximumPrimaryColumnWidth = 400
splitViewController.secondaryColumnWidth = 300
} else {
splitViewController.preferredPrimaryColumnWidthFraction = 0.3
}
五、总结
UISplitViewController 是 UIKit 中非常实用的控制器,可以实现 iPad 上的主从布局。在使用 UISplitViewController 时,需要注意它的属性以及 UISplitViewControllerDelegate
协议的实现方法。通过学习本文,相信大家能对 UISplitViewController 有更深入的理解。