如何设置leftBarButtonItem的大小?

4

我正在尝试通过编程设置左侧按钮栏项的大小,但是我无法做到。

这是我的代码:

        let backButton = UIButton(frame: CGRect(x: 0, y: 0, width: 30, height: 30))
        backButton.setBackgroundImage(UIImage(named: "hipster_pelo2.png"), for: .normal)
        self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: backButton)

但是在使用Xcode 9和Swift 3进行开发时,iPhone X的显示结果会出现这种情况。如图所示,您可以看到标题应用程序因按钮大小而向右移动:

enter image description here

有人知道问题可能是图片大小吗?


请查看已发布的答案,如果您需要帮助,请告诉我。 - Sandeep Bhandari
请检查并确认Edit 2是否解决了您的圆形图像问题。 - Sandeep Bhandari
1个回答

9
您可以使用以下方法限制barButton项目的大小:
let barButton = UIBarButtonItem(customView: backButton)  
NSLayoutConstraint.activate([(barButton.customView!.widthAnchor.constraint(equalToConstant: 30)),(barButton.customView!.heightAnchor.constraint(equalToConstant: 30))])
self.navigationItem.leftBarButtonItem = barButton

参考资料:https://skyebook.net/blog/2017/09/uibarbuttonitem-sizing-in-ios-11/ 这个按钮的巨大框架是由于你设置给按钮背景的巨大图像。虽然你设置给按钮的框架应该覆盖按钮的隐式大小,但由于某些奇怪的原因,当作为自定义视图传递给工具栏按钮时,隐式大小会占据优势。因此,为了限制自定义视图的大小,应用宽度和高度约束变得必要。
编辑: 由于问题在于从URL加载图像并将其设置为按钮的图像,因此我更新了我的回答以演示相同的操作。
    do {
        try button.setImage(UIImage(data: Data(contentsOf: your_url)), for: .normal)
    }
    catch {
        print(error)
    } 

问题在于OP的代码试图在图片下载之前设置按钮图像。因此,这应该可以帮助您解决问题 :)

编辑2:

OP在使工具栏按钮的customView成为圆形方面遇到了麻烦,因此这里是应该使BarButton项目的customView成为圆形的代码 :)

    barButton.customView?.layer.cornerRadius = 15
    barButton.customView?.layer.masksToBounds = true

希望这有所帮助。

谢谢,这节省了我的时间 :) NSLayoutConstraint.activate 这一行代码真是神奇 :D - Akhtar

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