在 Swift4 中,替换 navigationItem.leftBarButtonItem 调整了不需要的大小 [英] in Swift4, replacement of navigationItem.leftBarButtonItem resizes unwanted

查看:20
本文介绍了在 Swift4 中,替换 navigationItem.leftBarButtonItem 调整了不需要的大小的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在使用不同的帧和图像值返回到 VC 时,UIBarButtonItem 调整大小时出现问题.

Having a problem with UIBarButtonItem resizing when returning to VC with different values for frame and image.

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
}

selectedR = 1 的第一次完美尺寸

First time perfect size for selectedR = 1

使用不同的 selectedR 值返回 viewDidLoad 并且图像爆炸、扭曲和设置 leftFrame 大小不符合要求.

Coming back into viewDidLoad with different selectedR value and image blows up, distorts and setting the leftFrame size is not honoured.

这一切在 swift 3 中都很完美,但在 swift 4 中却无处不在.任何帮助或建议将不胜感激.

This all worked perfect in swift 3, but swift 4 it goes all over the place. Any help or suggestions would be much appreciated.

推荐答案

iOS 10 和 11 之间的一个主要变化是现在栏按钮项目由自动布局引擎布局.通常这应该是向后兼容的.但是,如果您在布局栏按钮项时遇到问题,您应该尝试设置约束,看看是否能解决您的问题.

One major change between iOS 10 and 11 is now bar button items are laid out by the auto layout engine. Typically that should be backward compatible. But if you are having problems with laying out bar button items, you should try setting constraints and see if that solves your problem.

在你的情况下,你会说:

In you case you would say:

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
}

Apple 的 WWDC 2017 会议更新您的 iOS 11 应用程序.

This was covered in Apple's WWDC 2017 session Updating Your App for iOS 11.

这篇关于在 Swift4 中,替换 navigationItem.leftBarButtonItem 调整了不需要的大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆