我正在学习教程。。
标题视图工作正常。左栏项目不好看。我不知道为什么。
this
这是我的密码。。
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)
}
最佳答案
您正在设置的帧被自动布局覆盖。
标题视图可能也是如此。如果您在运行时查看它的帧,它可能不是h34 w34的大小。这似乎是因为您设置了titleImageView.contentMode=.scaleAspectFit,这将使图像适合其帧内,而无需拉伸它。
另一方面,左边的按钮看起来是扭曲的,因为您将图像添加到一个UIButton中,该UIButton使用contentMode=.scalespectfill的UIImageView来显示图像(您可以通过使用视图调试器和检查导航项亲自查看)。
为了解决这个问题,我建议使用Auto Layout根据约束来指定项的大小:
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)
}