导航LeftBarButtonItem无法正确呈现,框架无法正常工作

时间:2019-03-03 06:42:59

标签: ios swift

我正在关注this教程。 标题视图工作正常。左栏项目看起来不太好。我不知道为什么。

enter image description here

这是我的代码。

 func setUpNavigationBarItems(){
    //https://www.youtube.com/watch?v=zS-CCd4xmRY
    let titleImageView = UIImageView(image: UIImage(named: "ic_nav_app_icon"))
    titleImageView.frame = CGRect(x: 0, y: 0, width: 34, height: 34)
    titleImageView.contentMode = .scaleAspectFit
    navigationItem.titleView = titleImageView

    let addButton = UIButton(type: .system)
    let addImage = UIImage(named: "ic_nav_add")
    addButton.setImage(addImage?.withRenderingMode(.alwaysOriginal), for: .normal)
    addButton.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
    navigationItem.leftBarButtonItem = UIBarButtonItem(customView: addButton)
}

1 个答案:

答案 0 :(得分:2)

您正在设置的框架被“自动版式”否决了。

标题视图可能也是如此。如果您在运行时看一下它的框架,它的大小可能不会是h34 w34。这似乎是因为您设置了titleImageView.contentMode = .scaleAspectFit,这将使图像适合其框架而不会拉伸。

另一方面,左按钮显示为扭曲,因为您将图像添加到了UIButton上,该UIButton使用具有contentMode = .scaleAspectFill的UIImageView来显示图像(您可以通过使用视图调试器并检查导航项来自己查看) )。

要解决此问题,我建议使用自动版式来根据约束条件指定项目的大小:

func setUpNavigationBarItems(){
    let titleImageView = UIImageView(image: UIImage(named: "ic_nav_app_icon"))
    NSLayoutConstraint(item: titleImageView, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 34).isActive = true
    NSLayoutConstraint(item: titleImageView, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 34).isActive = true
    titleImageView.contentMode = .scaleAspectFit
    navigationItem.titleView = titleImageView

    let addButton = UIButton(type: .system)
    let addImage = UIImage(named: "ic_nav_add")
    addButton.setImage(addImage?.withRenderingMode(.alwaysOriginal), for: .normal)
    NSLayoutConstraint(item: addButton, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 30).isActive = true
    NSLayoutConstraint(item: addButton, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 30).isActive = true
    navigationItem.leftBarButtonItem = UIBarButtonItem(customView: addButton)
}