UISplitViewController iPad 行为
UISplitViewController iPad behaviour
我正在制作我的第一个通用应用程序,到目前为止一切顺利,但我在 iPad 上遇到 UISplitViewController 问题。
如何使 UISplitViewController 在纵向模式下与 iPhone 相同?
就像在纵向模式下,当我点击它时只显示主屏幕,它导航到详细信息屏幕,而在横向模式下,它们并排显示。
现在发生了什么,它只以纵向显示详细信息屏幕,并以横向模式显示它们。
对于 iPhone 我在主视图中使用此代码来解决此问题
func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool {
return true
}
但这不适用于 iPad,我在这里找到了另一个代码,但也没有用。
func splitViewController(svc: UISplitViewController, willHideViewController aViewController: UIViewController, withBarButtonItem barButtonItem: UIBarButtonItem, forPopoverController pc: UIPopoverController) {
self.navigationItem.leftBarButtonItem?.target?.performSelector((self.navigationItem.leftBarButtonItem?.action)!, withObject: self.navigationItem)
}
您可能需要了解其他代码,我在主视图控制器的 viewDidLoad 中添加了这些代码
self.splitViewController?.delegate = self
self.splitViewController?.preferredDisplayMode = UISplitViewControllerDisplayMode.PrimaryOverlay
self.splitViewController!.maximumPrimaryColumnWidth = splitViewController!.view.bounds.size.width;
self.splitViewController!.preferredPrimaryColumnWidthFraction = 0.3
所以如果有人能帮我找到解决这个问题的方法,我将非常感激
UISplitViewController 使用大小 classes 来确定如何显示他的主视图控制器和详细视图控制器。
当您的 UISplitViewController 具有 horizontalSizeClass 和 verticalSizeClass Regular 时,它将在同一屏幕上同时显示主视图控制器和详细视图控制器。
您需要将拆分视图控制器嵌入到容器视图控制器中,以将默认大小 class 覆盖为 。
您还必须检查设备方向以在紧凑(纵向时)或常规(横向时)水平尺寸之间切换 class:
class ContainerVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
performOverrideTraitCollection()
}
private func performOverrideTraitCollection() {
let orientation = UIDevice.currentDevice().orientation
var isPortrait = false
switch orientation {
case .Portrait, .PortraitUpsideDown:
isPortrait = true
default:
isPortrait = false
}
for childVC in self.childViewControllers {
self.traitCollection.userInterfaceIdiom
setOverrideTraitCollection(UITraitCollection(horizontalSizeClass: isPortrait ? .Compact : .Regular), forChildViewController: childVC)
}
}
}
我正在制作我的第一个通用应用程序,到目前为止一切顺利,但我在 iPad 上遇到 UISplitViewController 问题。
如何使 UISplitViewController 在纵向模式下与 iPhone 相同?
就像在纵向模式下,当我点击它时只显示主屏幕,它导航到详细信息屏幕,而在横向模式下,它们并排显示。
现在发生了什么,它只以纵向显示详细信息屏幕,并以横向模式显示它们。
对于 iPhone 我在主视图中使用此代码来解决此问题
func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool {
return true
}
但这不适用于 iPad,我在这里找到了另一个代码,但也没有用。
func splitViewController(svc: UISplitViewController, willHideViewController aViewController: UIViewController, withBarButtonItem barButtonItem: UIBarButtonItem, forPopoverController pc: UIPopoverController) {
self.navigationItem.leftBarButtonItem?.target?.performSelector((self.navigationItem.leftBarButtonItem?.action)!, withObject: self.navigationItem)
}
您可能需要了解其他代码,我在主视图控制器的 viewDidLoad 中添加了这些代码
self.splitViewController?.delegate = self
self.splitViewController?.preferredDisplayMode = UISplitViewControllerDisplayMode.PrimaryOverlay
self.splitViewController!.maximumPrimaryColumnWidth = splitViewController!.view.bounds.size.width;
self.splitViewController!.preferredPrimaryColumnWidthFraction = 0.3
所以如果有人能帮我找到解决这个问题的方法,我将非常感激
UISplitViewController 使用大小 classes 来确定如何显示他的主视图控制器和详细视图控制器。
当您的 UISplitViewController 具有 horizontalSizeClass 和 verticalSizeClass Regular 时,它将在同一屏幕上同时显示主视图控制器和详细视图控制器。
您需要将拆分视图控制器嵌入到容器视图控制器中,以将默认大小 class 覆盖为
您还必须检查设备方向以在紧凑(纵向时)或常规(横向时)水平尺寸之间切换 class:
class ContainerVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
performOverrideTraitCollection()
}
private func performOverrideTraitCollection() {
let orientation = UIDevice.currentDevice().orientation
var isPortrait = false
switch orientation {
case .Portrait, .PortraitUpsideDown:
isPortrait = true
default:
isPortrait = false
}
for childVC in self.childViewControllers {
self.traitCollection.userInterfaceIdiom
setOverrideTraitCollection(UITraitCollection(horizontalSizeClass: isPortrait ? .Compact : .Regular), forChildViewController: childVC)
}
}
}