全面了解 UISplitViewController

发布时间:2023-05-19

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 的 primaryColumnWidthminimumPrimaryColumnWidthmaximumPrimaryColumnWidthsecondaryColumnWidth 等属性,可以实现主控制器和从控制器的大小调整。

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 有更深入的理解。