Swift 3 iOS- 以编程方式从 SplitViewController 的 DetailNavigationController 设置和推送新的 RootVC
Swift 3 iOS- Programmatically Set and Push a new RootVC from a SplitViewController's DetailNavigationController
-
uinavigationcontroller
-
popviewcontroller
-
pushviewcontroller
-
uisplitviewcontroller
-
rootviewcontroller
我有一个 SplitViewVC,它有一个 MasterNavVC,它的根是一个 TableViewVC。 SplitViewVC 还有一个 DetailNavVC,它的根是 WhiteVC。我想从我的 TableViewVC 获得其他几个视图控制器:RedVC、GreenVC、BlueVC 和 PinkVC。我不想使用所有这些 IB segue 连接,所以我想以编程方式推送给它们。 TableView 的单元格有一个推动 DetailNavVC 的 segue,因此所有其他 vc 都必须通过它。我将其用于 iPad 和 iPhone 适应性。
问题出在 TableView 的 didSelect 方法上,当我尝试推送到任何颜色 vc 时,WhiteVC 总是显示向前推送和向后弹出:
例如
推送- TableView -> WhiteVC -> RedVC
Pop- RedVC -> WhiteVC -> TableView
我要
推送- TableView -> RedVC
Pop- RedVC -> TableView
我试图删除 WhiteVC,但我一直收到异常:
Cannot display a nested UINavigationController with zero
viewControllers
所以我添加了 WhiteVC 来消除该错误,但是下面的 none 方法有效。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
switch indexPath.row{
case 0:
//this shows the WhiteVC while pushing and popping
let redVC = storyboard?.instantiateViewController(withIdentifier: "RedVC") as! RedVC
navigationController?.pushViewController(redVC, animated: true)
break
case 1:
//this shows the WhiteVC while pushing but removes the backButton from the GreenVC
let greenVC = storyboard?.instantiateViewController(withIdentifier: GreenVC") as! GreenVC
navigationController?.setViewControllers([greenVC], animated: true)
break
case 2:
//this has the same effect as case 1
let blueVC = storyboard?.instantiateViewController(withIdentifier: BlueVC") as! BlueVC
let root = detailNavController(rootViewController: blueVC)
navigationController?.pushViewController(root, animated: true)
break
case 3:
//this shows the WhiteVC pushing but doesn't show it popping
let masterNav = splitViewController?.viewControllers.last as! MasterNavVC
let detailNav = masterNav.viewControllers.last as! DetailNavVC
let pinkVC = storyboard?.instantiateViewController(withIdentifier: "PinkVC") as! PinkVC
detailNav.setViewControllers([pinkVC], animated: true)
break
案例 3 就像 WhiteVC 在推动时显示的那样进入壁橱,但它没有显示弹出(它正确地弹出到 root):
推送- TableView -> WhiteVC -> PinkVC
Pop- PinkVC -> TableView
我想在不显示 WhiteVC 的情况下以编程方式推送到其他颜色的 vc(当然是在点击他们选择的单元格之后)。我该怎么做?
首先我要说的是,Apple 建议 SpiltVC 以 root 身份启动。我 运行 遇到的问题是,如果使用 TabBarVC 作为根,你必须将它放在 containerView 中,然后将 containerView 作为 NavVC 的根,而 NavVC 将是 SplitVC 的根。
SplitVC > NavVC > ContainerVC > TabBarVC //this wasn't working out
我决定使用 TabBarVC 作为 root 并为每个 Tab 添加一个单独的 SplitVC。如果您查看下图的左侧,这就是 Apple 的 MasterDetailApp 启动时的样子。场景右边是我改用的布局
在图像的右侧,我有一个 TabBar 作为根,每个选项卡都有一个 SplitVC,每个 SplitVc 都有自己的 NavVC,它本身有自己的 TableVC 作为根:
____SplitVC -- NavVC -- TableVC //this would be tab 0 and where we will focus
/
/
TabBarVC //all the other color vcs I want to get to from the TableVC in tab 0
\
\____SplitVC -- NavVC -- TableVC
请注意,我没有使用图像右侧的 DetailNavigationController,就像 MasterDetailApp 中包含的那样。
我只关注从 TabBar 的第一个选项卡推送 vcs,因为您将对 TabBar 的第二个选项卡使用相同的方法。
要在 appDelegate 的 didFinishLaunching 中开始,您只需将要首先登陆的选项卡添加为 selectedIndex:
AppDelegate:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
//I subclassed the TabBarVC with the name TabBarController
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let tabBarVC: TabBarController = mainStoryboard.instantiateViewController(withIdentifier: "TabBarController") as! TabBarController
tabBarController.selectedIndex = 0
window?.rootViewController = tabBarController
window?.makeKeyAndVisible()
return true
}
仅供参考,这是选项卡 0 的 vc 的流程和名称:
TabBarContoller > TabZeroSplitVC > TabZeroNavVC > SettingsVC
以这种方式启动会给我 SettingsVC,它在 iPad 上会在分屏模式下位于左侧(主控侧)。您还必须符合 UISplitViewControllerDelegate 并在 viewDidLoad 中进行设置,以便它显示分屏,左侧是主画面,右侧是细节。
SettingsVC: UIViewController, UISplitViewControllerDelegate{
@IBOutlet weak fileprivate var tableView: UITableView!
var colors = ["RedVC", "GreenVC", "BlueVC", "PinkVC"]
override func viewDidLoad() {
super.viewDidLoad()
splitViewController?.delegate = self
//this keeps it in splitScreen mode
splitViewController?.preferredDisplayMode = UISplitViewControllerDisplayMode.allVisible
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.colors.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "ColorsCell", for: indexPath) as! ColorsCell
cell.titleLabel?.text = self.colors[indexPath.row]
return cell
}
因为我没有在 Storyboard 中包含 DetailNavigationController,所以屏幕的右侧(细节侧)将是空白的。因此,启动后您会看到如下所示的屏幕:
想法是首先以编程方式添加 NavVC,然后以编程方式将 WhiteVC 添加为根。这样 WhiteVC 最初将显示在屏幕的右侧。关键是使用 splitVC 的 showDetailViewController(vc: UIViewController, sender: Any?)
以编程方式显示它。顺便说一句,将导航添加为 class 变量很重要,因为我们将使用它来显示其他颜色 vcs.
SettingsVC: UIViewController, UISplitViewControllerDelegate{
@IBOutlet weak fileprivate var tableView: UITableView!
var colors = ["RedVC", "GreenVC", "BlueVC", "PinkVC"]
var whiteVC: WhiteController? //the one from the storyboard
var nav: UINavigationController? //this will represent the DetailNavigationController from Apple's MasterDetailApp
override func viewDidLoad() {
super.viewDidLoad()
splitViewController?.delegate = self
splitViewController?.preferredDisplayMode = UISplitViewControllerDisplayMode.allVisible
//1st instantiate the WhiteVC that was created in storyboard
self.whiteVC = storyboard?.instantiateViewController(withIdentifier: "WhiteController") as? WhiteController
//2nd add it to the programmatic navigationController as it's root
self.nav = UINavigationController(rootViewController: whiteVC!)
//3rd use the splitVC method to show the nav on the right side of scene
splitViewController?.showDetailViewController(self.nav!, sender: self
}
现在启动后场景将如下所示:
现在回答如何在不包括 WhiteVC 的情况下推动任何颜色 vc 的问题。您所要做的就是将任何颜色 vc 作为根添加到作为 class 变量创建的程序化导航中。在 tableView 的 didSelectRow
里面是你添加它并从
显示的地方
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
switch indexPath.row{
case 0:
let redVC = storyboard?.instantiateViewController(withIdentifier: "RedController") as! RedController
self.nav = UINavigationController(rootViewController: redVC)
splitViewController?.showDetailViewController(self.nav! , sender: self)
break
case 1:
let greenVC = storyboard?.instantiateViewController(withIdentifier: "GreenController") as! GreenController
self.nav = UINavigationController(rootViewController: greenVC)
splitViewController?.showDetailViewController(self.nav! , sender: self)
break
case 2:
let blueVC = storyboard?.instantiateViewController(withIdentifier: "BlueController") as! BlueController
self.nav = UINavigationController(rootViewController: blueVC)
splitViewController?.showDetailViewController(self.nav! , sender: self)
break
case 3:
let pinkVC = storyboard?.instantiateViewController(withIdentifier: "PinkController") as! PinkController
self.nav = UINavigationController(rootViewController: PinkVC)
splitViewController?.showDetailViewController(self.nav! , sender: self)
break
}
现在,如果您选择标有 RedVC 的单元格,您将得到这个(RedVC 顶部应该有一个导航栏,但我忘记在 Photoshop 中添加它):
如果你查看 didSelectRow 内部,你会看到导航现在有一个新的根,即 redVC(它最初在 viewDidLoad 中使用 WhiteVC)。由于您更改了根,因此 WhiteVC 不再位于层次结构中。任何其他颜色都会发生同样的事情。如果你选择 PinkVC,你会得到(PinkVC 顶部应该有一个导航栏,但我忘了在 Photoshop 中添加它):
在任何情况下,您所要做的就是为导航设置一个新的根目录。如果你想添加向外扩展视图的双展开箭头
你也可以将它添加到 didSelectRow
case 0:
let redVC = storyboard?.instantiateViewController(withIdentifier: "RedController") as! RedController
self.nav = UINavigationController(rootViewController: redVC)
//these 2 lines of code are what adds the double expand arrow
self.nav?.topViewController?.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem
self.nav?.topViewController?.navigationItem.leftItemsSupplementBackButton = true
splitViewController?.showDetailViewController(self.nav! , sender: self)
break
//add the same exact 2 lines for every other case
最后一件事。这是我 运行 遇到的一个大问题,我相信其他人可能 运行 遇到这个问题,因为这个 SplitVC 不是 root。假设您希望在启动时在选项卡零上显示另一个 vc(即 O运行geVC)而不是 SettingsVC。问题是设置是:
TabBarContoller > TabZeroSplitVC > TabZeroNavVC > SettingsVC
由于故事板将 SettingsVC 作为 TabZeroNavVC 的根,您必须在 appDelegate 的 didFinishLaunching(或您的登录屏幕等)中更改它。
使用它的代码是:
AppDelegate:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
//I subclassed the TabBarVC with the name TabBarController
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let tabBarVC: TabBarController = mainStoryboard.instantiateViewController(withIdentifier: "TabBarController") as! TabBarController
tabBarController.selectedIndex = 0
//first you have to get to the splitVC on the first tab
let tabZeroSplitVC = tabBarController.viewControllers![0] as! TabZeroSplitController
//second you have to get to the navVC that's connected to the splitVC
let tabZeroNavVC = tabZeroSplitVC.childViewControllers[0] as! TabZeroNavController
//third instantiate the vc that you want to appear upon launch
let orangeVC = mainStoryboard.instantiateViewController(withIdentifier: "OrangeController") as! OrangeController
//the navVC has a method to set a new array of vcs. Just add the orangeVC in here (make sure to put it in array brackets)
tabZeroNavVC.setViewControllers( [orangeVC], animated: true)
window?.rootViewController = tabBarController
window?.makeKeyAndVisible()
return true
}
启动 O运行geVC 后就会显示。由于 O运行geVC 不是 tableView,您可能希望显示全屏。请务必添加 UISplitViewControllerDelegate 并在 viewDidLoad 中添加:
OrangeVC: UIViewController, UISplitViewControllerDelegate{
override func viewDidLoad() {
super.viewDidLoad()
splitViewController?.delegate = self
//this will hide splitScreen and will only show fullScreen
splitViewController?.preferredDisplayMode = UISplitViewControllerDisplayMode.primaryHidden
}
您将在启动时拥有 o运行ge 的全屏,而不是分屏。
尽管这些链接使用 SplitVC 作为根,但这些是一些关于配置 SplitVC 的非常好的博客文章:
uinavigationcontroller
popviewcontroller
pushviewcontroller
uisplitviewcontroller
rootviewcontroller
我有一个 SplitViewVC,它有一个 MasterNavVC,它的根是一个 TableViewVC。 SplitViewVC 还有一个 DetailNavVC,它的根是 WhiteVC。我想从我的 TableViewVC 获得其他几个视图控制器:RedVC、GreenVC、BlueVC 和 PinkVC。我不想使用所有这些 IB segue 连接,所以我想以编程方式推送给它们。 TableView 的单元格有一个推动 DetailNavVC 的 segue,因此所有其他 vc 都必须通过它。我将其用于 iPad 和 iPhone 适应性。
问题出在 TableView 的 didSelect 方法上,当我尝试推送到任何颜色 vc 时,WhiteVC 总是显示向前推送和向后弹出:
例如
推送- TableView -> WhiteVC -> RedVC
Pop- RedVC -> WhiteVC -> TableView
我要
推送- TableView -> RedVC
Pop- RedVC -> TableView
我试图删除 WhiteVC,但我一直收到异常:
Cannot display a nested UINavigationController with zero viewControllers
所以我添加了 WhiteVC 来消除该错误,但是下面的 none 方法有效。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
switch indexPath.row{
case 0:
//this shows the WhiteVC while pushing and popping
let redVC = storyboard?.instantiateViewController(withIdentifier: "RedVC") as! RedVC
navigationController?.pushViewController(redVC, animated: true)
break
case 1:
//this shows the WhiteVC while pushing but removes the backButton from the GreenVC
let greenVC = storyboard?.instantiateViewController(withIdentifier: GreenVC") as! GreenVC
navigationController?.setViewControllers([greenVC], animated: true)
break
case 2:
//this has the same effect as case 1
let blueVC = storyboard?.instantiateViewController(withIdentifier: BlueVC") as! BlueVC
let root = detailNavController(rootViewController: blueVC)
navigationController?.pushViewController(root, animated: true)
break
case 3:
//this shows the WhiteVC pushing but doesn't show it popping
let masterNav = splitViewController?.viewControllers.last as! MasterNavVC
let detailNav = masterNav.viewControllers.last as! DetailNavVC
let pinkVC = storyboard?.instantiateViewController(withIdentifier: "PinkVC") as! PinkVC
detailNav.setViewControllers([pinkVC], animated: true)
break
案例 3 就像 WhiteVC 在推动时显示的那样进入壁橱,但它没有显示弹出(它正确地弹出到 root):
推送- TableView -> WhiteVC -> PinkVC
Pop- PinkVC -> TableView
我想在不显示 WhiteVC 的情况下以编程方式推送到其他颜色的 vc(当然是在点击他们选择的单元格之后)。我该怎么做?
首先我要说的是,Apple 建议 SpiltVC 以 root 身份启动。我 运行 遇到的问题是,如果使用 TabBarVC 作为根,你必须将它放在 containerView 中,然后将 containerView 作为 NavVC 的根,而 NavVC 将是 SplitVC 的根。
SplitVC > NavVC > ContainerVC > TabBarVC //this wasn't working out
我决定使用 TabBarVC 作为 root 并为每个 Tab 添加一个单独的 SplitVC。如果您查看下图的左侧,这就是 Apple 的 MasterDetailApp 启动时的样子。场景右边是我改用的布局
在图像的右侧,我有一个 TabBar 作为根,每个选项卡都有一个 SplitVC,每个 SplitVc 都有自己的 NavVC,它本身有自己的 TableVC 作为根:
____SplitVC -- NavVC -- TableVC //this would be tab 0 and where we will focus
/
/
TabBarVC //all the other color vcs I want to get to from the TableVC in tab 0
\
\____SplitVC -- NavVC -- TableVC
请注意,我没有使用图像右侧的 DetailNavigationController,就像 MasterDetailApp 中包含的那样。
我只关注从 TabBar 的第一个选项卡推送 vcs,因为您将对 TabBar 的第二个选项卡使用相同的方法。
要在 appDelegate 的 didFinishLaunching 中开始,您只需将要首先登陆的选项卡添加为 selectedIndex:
AppDelegate:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
//I subclassed the TabBarVC with the name TabBarController
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let tabBarVC: TabBarController = mainStoryboard.instantiateViewController(withIdentifier: "TabBarController") as! TabBarController
tabBarController.selectedIndex = 0
window?.rootViewController = tabBarController
window?.makeKeyAndVisible()
return true
}
仅供参考,这是选项卡 0 的 vc 的流程和名称:
TabBarContoller > TabZeroSplitVC > TabZeroNavVC > SettingsVC
以这种方式启动会给我 SettingsVC,它在 iPad 上会在分屏模式下位于左侧(主控侧)。您还必须符合 UISplitViewControllerDelegate 并在 viewDidLoad 中进行设置,以便它显示分屏,左侧是主画面,右侧是细节。
SettingsVC: UIViewController, UISplitViewControllerDelegate{
@IBOutlet weak fileprivate var tableView: UITableView!
var colors = ["RedVC", "GreenVC", "BlueVC", "PinkVC"]
override func viewDidLoad() {
super.viewDidLoad()
splitViewController?.delegate = self
//this keeps it in splitScreen mode
splitViewController?.preferredDisplayMode = UISplitViewControllerDisplayMode.allVisible
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.colors.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "ColorsCell", for: indexPath) as! ColorsCell
cell.titleLabel?.text = self.colors[indexPath.row]
return cell
}
因为我没有在 Storyboard 中包含 DetailNavigationController,所以屏幕的右侧(细节侧)将是空白的。因此,启动后您会看到如下所示的屏幕:
想法是首先以编程方式添加 NavVC,然后以编程方式将 WhiteVC 添加为根。这样 WhiteVC 最初将显示在屏幕的右侧。关键是使用 splitVC 的 showDetailViewController(vc: UIViewController, sender: Any?)
以编程方式显示它。顺便说一句,将导航添加为 class 变量很重要,因为我们将使用它来显示其他颜色 vcs.
SettingsVC: UIViewController, UISplitViewControllerDelegate{
@IBOutlet weak fileprivate var tableView: UITableView!
var colors = ["RedVC", "GreenVC", "BlueVC", "PinkVC"]
var whiteVC: WhiteController? //the one from the storyboard
var nav: UINavigationController? //this will represent the DetailNavigationController from Apple's MasterDetailApp
override func viewDidLoad() {
super.viewDidLoad()
splitViewController?.delegate = self
splitViewController?.preferredDisplayMode = UISplitViewControllerDisplayMode.allVisible
//1st instantiate the WhiteVC that was created in storyboard
self.whiteVC = storyboard?.instantiateViewController(withIdentifier: "WhiteController") as? WhiteController
//2nd add it to the programmatic navigationController as it's root
self.nav = UINavigationController(rootViewController: whiteVC!)
//3rd use the splitVC method to show the nav on the right side of scene
splitViewController?.showDetailViewController(self.nav!, sender: self
}
现在启动后场景将如下所示:
现在回答如何在不包括 WhiteVC 的情况下推动任何颜色 vc 的问题。您所要做的就是将任何颜色 vc 作为根添加到作为 class 变量创建的程序化导航中。在 tableView 的 didSelectRow
里面是你添加它并从
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
switch indexPath.row{
case 0:
let redVC = storyboard?.instantiateViewController(withIdentifier: "RedController") as! RedController
self.nav = UINavigationController(rootViewController: redVC)
splitViewController?.showDetailViewController(self.nav! , sender: self)
break
case 1:
let greenVC = storyboard?.instantiateViewController(withIdentifier: "GreenController") as! GreenController
self.nav = UINavigationController(rootViewController: greenVC)
splitViewController?.showDetailViewController(self.nav! , sender: self)
break
case 2:
let blueVC = storyboard?.instantiateViewController(withIdentifier: "BlueController") as! BlueController
self.nav = UINavigationController(rootViewController: blueVC)
splitViewController?.showDetailViewController(self.nav! , sender: self)
break
case 3:
let pinkVC = storyboard?.instantiateViewController(withIdentifier: "PinkController") as! PinkController
self.nav = UINavigationController(rootViewController: PinkVC)
splitViewController?.showDetailViewController(self.nav! , sender: self)
break
}
现在,如果您选择标有 RedVC 的单元格,您将得到这个(RedVC 顶部应该有一个导航栏,但我忘记在 Photoshop 中添加它):
如果你查看 didSelectRow 内部,你会看到导航现在有一个新的根,即 redVC(它最初在 viewDidLoad 中使用 WhiteVC)。由于您更改了根,因此 WhiteVC 不再位于层次结构中。任何其他颜色都会发生同样的事情。如果你选择 PinkVC,你会得到(PinkVC 顶部应该有一个导航栏,但我忘了在 Photoshop 中添加它):
在任何情况下,您所要做的就是为导航设置一个新的根目录。如果你想添加向外扩展视图的双展开箭头
你也可以将它添加到 didSelectRow
case 0:
let redVC = storyboard?.instantiateViewController(withIdentifier: "RedController") as! RedController
self.nav = UINavigationController(rootViewController: redVC)
//these 2 lines of code are what adds the double expand arrow
self.nav?.topViewController?.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem
self.nav?.topViewController?.navigationItem.leftItemsSupplementBackButton = true
splitViewController?.showDetailViewController(self.nav! , sender: self)
break
//add the same exact 2 lines for every other case
最后一件事。这是我 运行 遇到的一个大问题,我相信其他人可能 运行 遇到这个问题,因为这个 SplitVC 不是 root。假设您希望在启动时在选项卡零上显示另一个 vc(即 O运行geVC)而不是 SettingsVC。问题是设置是:
TabBarContoller > TabZeroSplitVC > TabZeroNavVC > SettingsVC
由于故事板将 SettingsVC 作为 TabZeroNavVC 的根,您必须在 appDelegate 的 didFinishLaunching(或您的登录屏幕等)中更改它。
使用它的代码是:
AppDelegate:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
//I subclassed the TabBarVC with the name TabBarController
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let tabBarVC: TabBarController = mainStoryboard.instantiateViewController(withIdentifier: "TabBarController") as! TabBarController
tabBarController.selectedIndex = 0
//first you have to get to the splitVC on the first tab
let tabZeroSplitVC = tabBarController.viewControllers![0] as! TabZeroSplitController
//second you have to get to the navVC that's connected to the splitVC
let tabZeroNavVC = tabZeroSplitVC.childViewControllers[0] as! TabZeroNavController
//third instantiate the vc that you want to appear upon launch
let orangeVC = mainStoryboard.instantiateViewController(withIdentifier: "OrangeController") as! OrangeController
//the navVC has a method to set a new array of vcs. Just add the orangeVC in here (make sure to put it in array brackets)
tabZeroNavVC.setViewControllers( [orangeVC], animated: true)
window?.rootViewController = tabBarController
window?.makeKeyAndVisible()
return true
}
启动 O运行geVC 后就会显示。由于 O运行geVC 不是 tableView,您可能希望显示全屏。请务必添加 UISplitViewControllerDelegate 并在 viewDidLoad 中添加:
OrangeVC: UIViewController, UISplitViewControllerDelegate{
override func viewDidLoad() {
super.viewDidLoad()
splitViewController?.delegate = self
//this will hide splitScreen and will only show fullScreen
splitViewController?.preferredDisplayMode = UISplitViewControllerDisplayMode.primaryHidden
}
您将在启动时拥有 o运行ge 的全屏,而不是分屏。
尽管这些链接使用 SplitVC 作为根,但这些是一些关于配置 SplitVC 的非常好的博客文章: