右侧按钮出现在导航栏中心

4

我想在导航栏右侧显示一个 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。


如果您使用导航栏或Storyboard添加代码,请提供更多的代码。 - Daniel Arantes Loverde
2个回答

6
根据我的经验,您之所以遇到这个问题,是因为您已经添加了适用于所有“1X、2X和3X”分辨率的大尺寸图片。您需要将其缩小到更适合导航栏的大小。
解决方案:1
您需要将其缩小到更适合导航栏的大小。请查看适用于UINavigationBar的图像大小。
对于1X图像大小:24X24 对于2X图像大小:48X48 对于3X图像大小:72X72
解决方案:2
如果您想使用相同的图像,则需要在代码中进行以下更改。
您只需在UIView中添加UIImageView,然后一切都将按预期工作。
代码:
    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

1
非常感谢,第二个解决方案解决了问题! - user13370778
1
很高兴听到这个消息!一天第四次 :) - Hitesh Surani

0
问题在于你的图片尺寸太大了。如果你使用系统自带的图片,你会注意到按钮位置是正确的。
    let imageSearch = UIImage(systemName: "magnifyingglass")
    let searchBarButtonItem = UIBarButtonItem(image: imageSearch, style: .plain, target: nil, action: nil)
    searchBarButtonItem.width = 20
    navigationItem.rightBarButtonItem = searchBarButtonItem

你需要做的是将图像缩小到适当的尺寸。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接