我想在导航栏的右侧显示BarButtomItem。
这就是我所做的:

let imageSearch = UIImage(named: "search")?.withRenderingMode(.alwaysOriginal)
    let searchBarButtonItem = UIBarButtonItem(image: imageSearch, style: .plain, target: self, action: #selector(handleSearch))
    searchBarButtonItem.width = 20
    navigationItem.rightBarButtonItem = searchBarButtonItem

当我运行应用程序时,“条形按钮”项位于中间,而不是我想要的右侧。
我也尝试过:
navigationItem.setRightBarButton(searchBarButtonItem, animated: true)

但这并不能解决问题。

编辑:
我没有在情节提要中使用程序,所以在场景委托中以编程方式添加了NavigationController

最佳答案

根据我的经验,您已经遇到了这个问题,因为您为所有resolution 1X, 2X and 3X添加了大尺寸图像。你需要
将其缩小到更适合导航栏的大小。

解决方案:1

您需要将其缩小到更适合导航栏的大小。请查看UINavigationBar的图片大小

对于1X图像尺寸:24X24

对于2X图像大小:48X48

对于3X图像大小:72X72

解决方案:2

如果要使用相同的图像,则需要在代码中进行以下更改。

您只需要在UIImageView中添加UIView,然后进行所有操作
如预期般运作。

码:

    let containerView = UIControl(frame: CGRect.init(x: 0, y: 0, width: 30, height: 30))
    containerView.addTarget(self, action: #selector(handleSearch), for: .touchUpInside)
    let imageSearch = UIImageView(frame: CGRect.init(x: 0, y: 0, width: 30, height: 30))
    imageSearch.image = UIImage(named: "search")
    containerView.addSubview(imageSearch)
    let searchBarButtonItem = UIBarButtonItem(customView: containerView)
    searchBarButtonItem.width = 20
    navigationItem.rightBarButtonItem = searchBarButtonItem

10-08 06:12