我可以在 Swift 中制作大的 rightBarButtonItem 吗?

Can I make large rightBarButtonItem in Swift?

我有:

self.title = "Title"
navigationController?.navigationBar.prefersLargeTitles = true
self.navigationController?.navigationBar.largeTitleTextAttributes = [NSAttributedString.Key.foregroundColor : UIColor.white]
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: self, action: #selector(addTapped))
navigationItem.rightBarButtonItem?.tintColor = .white

是否可以使这个 Add 看起来完全像这样 Title
像这样:

或此问题的任何其他解决方案 - 标题左侧 - 按钮图像右侧,高度相同?

我在我的应用程序中做了类似的事情 - 不完全是您要找的东西,但应该足够让您继续:

    func setupNavBar() {
    let rightButton = UIButton()
    rightButton.setTitle("Leave", for: .normal)
    rightButton.addTarget(self, action: #selector(rightButtonTapped(button:)), for: .touchUpInside)
    navigationController?.navigationBar.addSubview(rightButton)
    rightButton.tag = 97
    rightButton.frame = CGRect(x: self.view.frame.width, y: 0, width: 120, height: 20)

    let targetView = self.navigationController?.navigationBar
    let trailingConstraint = NSLayoutConstraint(item: rightButton, attribute:
        .trailingMargin, relatedBy: .equal, toItem: targetView,
                         attribute: .trailingMargin, multiplier: 1.0, constant: -16)
    let bottomConstraint = NSLayoutConstraint(item: rightButton, attribute: .bottom, relatedBy: .equal,
                                              toItem: targetView, attribute: .bottom, multiplier: 1.0, constant: -6)
    rightButton.translatesAutoresizingMaskIntoConstraints = false
    NSLayoutConstraint.activate([trailingConstraint, bottomConstraint])
    }

我还创建了这个函数来删除它(因此使用上面的标签):

    func removeRightButton(){
        guard let subviews = self.navigationController?.navigationBar.subviews else{
            log.info("Attempt to remove right button but subviews don't exist")
            return
        }
        for view in subviews{
            if view.tag == 97 {
                view.removeFromSuperview()
            }
        }
    }
    

请仔细阅读 this 答案,其中显示了如何在折叠和较大时管理导航栏标题。它不会给你一个确切的答案,但它一定会帮助你实现你想要的。

除此之外,请仔细阅读 this 答案,这将帮助您了解如何为右侧栏按钮项目提供 x、y 位置。

只是快速概述一下如何通过结合这两个答案来实现您想要的:-

  1. 根据你想做的导航栏的位置或高度设置右侧栏按钮项的位置。 Link 数字 2 将帮助你做到这一点。
  2. 当导航栏的高度增加或减少时观察您的导航栏,您可以更改右侧栏按钮项的位置。

完成。通过使用它,您可以管理栏按钮项目在这两个项目上的位置,当您的导航栏被放大时,您可以在不同的位置显示按钮,当导航栏折叠时,您可以在不同的位置显示按钮,以便它更改按钮位置后 vice-versa 您的问题看起来不存在。