在Swift4中,更换navigationItem.leftBarButtonItem将调整不需要的大小

UIBarButtonItem在使用帧和图像的不同值返回到VC时resize时遇到​​问题。

var selectedR = 1 var leftFrame = CGRect() var leftImage = UIImage() override func viewDidLoad() { super.viewDidLoad() if selectedR == 0 { leftFrame = CGRect(x: 0, y: 0, width: 33, height: 33) leftImage = UIImage(named: “pic-0”)! } else if selectedR == 1 { leftFrame = CGRect(x: 0, y: 0, width: 79, height: 33) leftImage = UIImage(named: "pic-1")! } else if selectedR == 2 { leftFrame = CGRect(x: 0, y: 0, width: 34, height: 33) leftImage = UIImage(named: "pic-2”)! } let cButton = UIButton(frame: leftFrame) cButton.setImage(leftImage, for: UIControlState()) cButton.addTarget(self.revealViewController(), action: #selector(SWRevealViewController.revealToggle(_:)), for: .touchUpInside) cButton.contentMode = UIViewContentMode.scaleAspectFit let leftItem = UIBarButtonItem(customView: cButton) self.navigationItem.leftBarButtonItem = leftItem } 

第一次select完美大小= 1

回到viewDidLoad与不同selectedR值和图像爆炸,扭曲和设置leftFrame大小不尊重。

这一切都在迅速3完美,但迅速4它遍布各地。 任何帮助或build议将不胜感激。

iOS 10和11之间的一个主要变化是现在栏button项由自动布局引擎布置。 通常应该向后兼容。 但是,如果您在布置条形button项目时遇到问题,则应尝试设置约束条件并查看是否可以解决您的问题。

在你的情况下,你会说:

 var selectedR = 1 var leftFrame = CGRect() var leftImage = UIImage() override func viewDidLoad() { super.viewDidLoad() if selectedR == 0 { leftFrame = CGRect(x: 0, y: 0, width: 33, height: 33) leftImage = UIImage(named: “pic-0”)! } else if selectedR == 1 { leftFrame = CGRect(x: 0, y: 0, width: 79, height: 33) leftImage = UIImage(named: "pic-1")! } else if selectedR == 2 { leftFrame = CGRect(x: 0, y: 0, width: 34, height: 33) leftImage = UIImage(named: "pic-2”)! } let cButton = UIButton(frame: leftFrame) cButton.widthAnchor.constraint(equalToConstant: leftFrame.width).isActive = true cButton.heightAnchor.constraint(equalToConstant: leftFrame.height).isActive = true cButton.setImage(leftImage, for: UIControlState()) cButton.addTarget(self.revealViewController(), action: #selector(SWRevealViewController.revealToggle(_:)), for: .touchUpInside) cButton.contentMode = UIViewContentMode.scaleAspectFit let leftItem = UIBarButtonItem(customView: cButton) self.navigationItem.leftBarButtonItem = leftItem } 

这在苹果的WWDC 2017会议上更新了iOS 11的应用程序