无法在 Swift4 的 UINavigationBar 上推送 UINavigationItem

can't push UINavigationItem on UINavigationBar in Swift4

我们使用代码创建 navigationBar 并为该 navigationBar 设置 navigationItem。

但是,按下 navigationItem 没有反应。

override func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = UIColor.white

    let navBar: UINavigationBar = {
        let navBar = UINavigationBar()
        navBar.frame = CGRect(x: 0, y: 44, width: view.frame.width, height: navBar.frame.height)
        navBar.barTintColor = UIColor.white
        let navItem = UINavigationItem()
        let saveButton = UIBarButtonItem(barButtonSystemItem: .save, target: self, action: #selector(saveBook))
        navItem.rightBarButtonItem = saveButton
        let cancelButton = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(cancel))
        navItem.leftBarButtonItem = cancelButton
        navItem.rightBarButtonItem?.isEnabled = true
        navItem.leftBarButtonItem?.isEnabled = true
        navItem.title = "書籍追加"
        navBar.pushItem(navItem, animated: true)
        return navBar
    }()
    view.addSubview(navBar)

显然这段代码不正确,因为框架仍然是 CGRect.zero。所以你将高度设置为0。你没有得到你想要的。

不在这里:

  navBar.frame = CGRect(x: 0, y: 44, width: view.frame.width, height: navBar.frame.height)

如果你添加代码,你就会明白我的意思,因为你看不到导航栏?:

    navBar.clipsToBounds = true
    view.addSubview(navBar)

你可以试试:

  navBar.frame = CGRect(x: 0, y: 44, width: view.frame.width, height: 44)