首页 文章

添加导航栏但没有后退按钮

提问于
浏览
1

我创建了一个表格视图,然后让用户按下一个单元格,它将转到 ListTavleView 但是现在唯一的问题是每当用户在ListTableView中时没有后退按钮,即使我已经嵌入了导航控制器

而且我希望拳头视图导航栏是小 Headers 第二视图导航栏是大 Headers

enter image description here

以下是我的代码

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showList" {
        if let indexPath = tableView.indexPathForSelectedRow {
            let items = dataManager.items[indexPath.row]
            let controller = (segue.destination as! UINavigationController).topViewController as! ListTableViewController
            controller.item = items
            controller.navigationItem.leftItemsSupplementBackButton = true
        }
    }
}

Below is my storybord setup

enter image description here

Navigation bar with no back button

enter image description here

4 回答

  • 0

    您正在将新的NavigationController(比如Nav.B)推送到现有的(Nav.A) .

    每个导航控制器保持不同的导航堆栈将viewcontroller添加到Navigation控制器时,后退按钮可见 . 了解更多关于UINavigationController的信息 .

    对于您当前的场景,您可以删除第二个导航控制器(我认为这不是必需的)并将直接segue连接到 ListTableViewController

    所以这

    let controller = (segue.destination as! UINavigationController).topViewController as! ListTableViewController
    

    let controller = segue.destination as! ListTableViewController
    

    当您需要大型 Headers (可用11)时,您可以在 viewDidLoad() 中添加此行

    navigationController?.navigationBar.prefersLargeTitles = true
    

    如果只需要此ViewController,请添加 viewWillDisappear()viewDidDisappear()

    navigationController?.navigationBar.prefersLargeTitles = false
    
  • 0

    从图像看来,视图控制器似乎被添加为当前视图控制器中的子视图控制器 .

    按下一个单元格时不需要嵌入式导航控制器,因为在起始点已经有一个导航控制器,所以不需要创建新的导航控制器 . (如果你提供一个视图控制器,那么你可能需要嵌入导航控制器 . )

    所以解决方案是......

    • 删除导航控制器 .

    enter image description here

    • 直接连接到没有导航控制器的目标视图控制器,因为已经存在 .

    enter image description here

  • 3

    如果你使用pushViewController更好,只是得到另一个视图控制器的引用,它总是一个后退按钮,因为你推动导航控制器这里是一个简单的例子:

    let story = UIStoryboard(name: "Main", bundle: nil)
    let vc = story.instantiateViewController(withIdentifier: "ExampleViewController") as! ExampleViewController
    self.navigationController?.pushViewController(vc, animated: true)
    

    至于后退按钮,问题在于您的层次结构 . 您是否更改了可能影响目标视图控制器中导航栏的另一个视图控制器中导航栏的左侧项目 .

  • 1

    如果你想在下一个视图上有导航栏后退按钮,那么只需在导航上按下目标视图,它就会显示默认导航后退按钮 . 不,需要任何额外的工作 .

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showList" {
      if let indexPath = tableView.indexPathForSelectedRow {
        let items = dataManager.items[indexPath.row]
    
        guard let controller = segue.destination as? ListTableViewController else {
          return
        }
        controller.item = items
        self.navigationController?.pushViewController(controller, animated: true)
      }
    }}
    

    如果你用segue推动viewcontroller,那么就不需要添加以下行 self.navigationController?.pushViewController(controller, animated: true)

相关问题