在UISplitViewController的细节视图中缺less标题栏

我有一个UISplitViewControllerembedded在一个容器视图(因为它不是在我的应用程序的根源),除了一个问题,它的机制工作很好: 在iPad上的细节视图的导航栏丢失。

初始设置基本如下:

  1. 在IB中,将分割视图控制器拖到故事板上,该分割视图控制器将创build一个分割视图控制器,一个导航控制器,一个表视图控制器(主控),一个基本的视图控制器(细节)以及连接它们的连接点。
  2. 使用容器视图添加常规视图控制器。 创build一个从容器视图到分割视图控制器的embedded塞格。
  3. 从原型单元添加另一个Segue到详细视图控制器,由主控制器中的以下代码支持:

 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { self.performSegue(withIdentifier: "showDetail", sender: nil) } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "showDetail" { let destinationViewController = segue.destination as! DetailViewController let path = self.tableView.indexPathForSelectedRow! as NSIndexPath destinationViewController.selectedTrainingId = (self.itemList[path.row] as! MyListItem).id } } 
  1. 添加数据。

将项目加载到主视图中并select细节正在工作。


这里是它在IB中的样子(为了节省空间,我展示了iPhone的布局,但是关系应该是可见的):

在这里输入图像说明

在处理类似问题方面,几乎没有答案。 最近的匹配build议为细节视图添加一个自己的导航控制器。 我不明白为什么这将是必要的,因为它的工作原理在iPhone上我相信显示细节视图使用相同的导航控制器作为主(根)视图。 但我试了一下。 正如我怀疑的结果是,最初显示一个导航栏。 但只要select了一个项目,该条就会消失。 以下是设置。

在这里输入图像说明

在许多应用程序(消息传递,电子邮件,Skype,…),你可以看到主视图和详细视图单独的顶部酒吧。 虽然技术上我的应用程序不是绝对需要这两个,它是不是真的很漂亮,尤其是有一个彩色的酒吧。 所以,问题是: 如何获得详细视图的导航栏

详细视图需要自己的导航控制器来显示iPad上的导航栏。 因此,问题中的第二个图像显示了正确的设置,不同之处在于详细信息需要指向导航控制器。

在这里输入图像说明

关键是要获得详细视图的句柄,以便设置选定的项目ID,这可以通过对原始代码的小改动来完成:

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "showDetail" { // Destination View Controller let destinationNavigationcontroller: UINavigationController! = segue.destination as! UINavigationController let destinationViewController: DetailViewController! = destinationNavigationcontroller.topViewController as! DetailViewController // Selected Row ID let path = self.tableView.indexPathForSelectedRow! as NSIndexPath destinationViewController.selectedId = (self.itemList[path.row] as! MyListItem).id } }