navigationItem.setLeftBarButton() 不适用于旧版本

Posted

技术标签:

【中文标题】navigationItem.setLeftBarButton() 不适用于旧版本【英文标题】:navigationItem.setLeftBarButton() not working on old versions 【发布时间】:2018-07-18 15:08:39 【问题描述】:

我正在使用 pushViewController,如下代码:

let vc = A()   
self.navigationController?.pushViewController(vc, animated:true)

我想向打开的页面添加一个导航项。此代码适用于新版本,但在 iPhone 5(ios 9.3) 模拟器iPad(10.3.3) 上不起作用 )

class A: UIViewController 

    override func viewDidLoad() 
        super.viewDidLoad()

        configureNavigationItem()
    

    func configureNavigationItem() 
        let buttonLogo = UIButton(type: .custom)
        buttonLogo.setImage(UIImage(named: "logo"), for: .normal)
        buttonLogo.setTitle("", for: .normal)
        buttonLogo.imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: -9, right: 0)
        let itemLogo = UIBarButtonItem(customView: buttonLogo)
        self.navigationItem.setLeftBarButton(itemLogo, animated: true)
    


旧版本中没有任何内容。我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

问题是您的 UIButton 大小为零。你需要给它一个大小!

buttonLogo.sizeToFit()
let itemLogo = UIBarButtonItem(customView: buttonLogo)

您的代码在 iOS 11 中有效的原因是它使用自动布局将按钮大小设置为 customView。但这是 iOS 11 的新功能。

【讨论】:

【参考方案2】:

使用渲染模式添加图像,如下所示。

let menuButtonImage = UIImage(named: "logo")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
buttonLogo.setImage(menuButtonImage, for: .normal)

然后检查

【讨论】:

以上是关于navigationItem.setLeftBarButton() 不适用于旧版本的主要内容,如果未能解决你的问题,请参考以下文章