2016-03-01 71 views
0

我正在制作我的第一个通用应用程序,迄今为止这么好,但我在iPad上遇到了与UISplitViewController有关的问题。UISplitViewController iPad的行为

如何使UISplitViewController在iPhone上处于纵向模式时与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 

所以请如果有人能帮助我找到这个问题的解决方案,我将非常感激

回答

0

UISplitViewController使用大小类来确定如何显示他的主控和详细视图控制器。

当您的UISplitViewController具有horizo​​ntalSizeClass和verticalSizeClass Regular时,它将在同一屏幕上显示主视图控制器和详细视图控制器。

您需要将分割视图控制器嵌入到容器视图控制器中,以覆盖默认大小类别I explained here

您还必须检查设备的方向压缩时(人像)或常规时(横向)水平尺寸类之间的叉:

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) 
    } 
} 
} 
+0

它正常工作时,我从景观上启动,然后切换到肖像但是当我直接以纵向方式启动iPad,我仍然一起看到主视图和详细视图控制器 – ahmedHegazi

+0

您是否可以尝试在viewDidLoad()中调用performOverrideTraitCollection()以及? – Terry

相关问题