Xcode使用条形图中的PDF图像按钮项目大小太大

时间:2017-10-10 22:14:09

标签: ios swift xcode interface-builder

我的Xcode项目中的图像资源文件中有一个PDF文件。我正在尝试创建一个使用该PDF图像的条形按钮项。但每当我在Interface Builder中将图像属性设置为图像时,它都会占用我的大部分标签栏并删除标题。

我有一个左栏按钮项目,系统项目停止。所以它看起来像X图标。我想用我的设置PDF图像在右侧做同样的事情。

有没有办法在Interface Builder中修复此大小调整问题?如果不是,我怎么能在代码中解决这个问题?

2 个答案:

答案 0 :(得分:9)

使用代码当图像尺寸太大时我会做什么,我在UIImage上渲染/设置之前调整UIControl的大小。我在UIImage上有此扩展程序,可帮助重新缩放图像。

// MARK: - Used to scale UIImages
extension UIImage {
    func scaleTo(_ newSize: CGSize) -> UIImage {
        UIGraphicsBeginImageContextWithOptions(newSize, false, 0.0)
        self.draw(in: CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height))
        let newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()
        return newImage
    }
}

使用它看起来像这样

let defaultImage = UIImage(named: "someimagenamehere")?
    .scaleTo(CGSize(width: 40, height: 40))

self.navigationItem.leftBarButtonItem = UIBarButtonItem(
    image: defaultImage,
    style: .plain,
    target: self,
    action: #selector(self.someselectorhere(_:)))

UPDATE :这就是使用@IBDesignable和@IBInspectable

的样子
@IBDesignable
class CustomBarButtonItem: UIBarButtonItem {

    @IBInspectable
    var scaledHeight: CGFloat = 0 {
        didSet {
            self.image = self.image?.scaleTo(CGSize(width: self.scaledHeight, height: self.scaledWidth))
        }
    }

    @IBInspectable
    var scaledWidth: CGFloat = 0 {
        didSet {
            self.image = self.image?.scaleTo(CGSize(width: self.scaledHeight, height: self.scaledWidth))
        }
    }
}

答案 1 :(得分:0)

公认的解决方案是一个很好的方法。但是,就我而言,我有一项是pdf,其余为png。我还遇到了一个开始的项目的问题,所有图标的大小都不一样。

我最终做了:

extension UIBarButtonItem {

    convenience init(image: UIImage?, size: CGSize, tintColor: UIColor, target: Any?, action: Selector?) {
        let holderView = UIButton()

        let button: UIButton = UIButton()
        button.translatesAutoresizingMaskIntoConstraints = false
        holderView.addSubview(button)

        button.centerYAnchor.constraint(equalTo: holderView.centerYAnchor).isActive = true
        button.centerXAnchor.constraint(equalTo: holderView.centerXAnchor).isActive = true
        button.heightAnchor.constraint(equalToConstant: size.height).isActive = true
        button.heightAnchor.constraint(equalToConstant: size.width).isActive = true

        button.setImage(image?.withRenderingMode(.alwaysTemplate), for: .normal)
        button.imageView?.contentMode = .scaleAspectFit
        button.tintColor = tintColor

        if let target = target, let action = action {
            button.addTarget(target, action: action, for: .touchUpInside)
        }

        self.init(customView: holderView)
    }

}

我希望对您有帮助