2017-10-10 199 views
5

我在我的Xcode项目中的图像assets文件中有一个PDF文件。我正在尝试创建一个使用该PDF图像的酒吧按钮项目。但是,无论何时将Interface Builder中的图像属性设置为图像,它都会占用我的大多数标签栏并删除标题。Xcode在条形图按钮中使用PDF图像项目大小太大

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

有没有办法解决这个界面生成器中的大小问题?如果不是,我该如何解决这个代码?

回答

6

使用代码当图像尺寸太大时,我会调整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)) 
     } 
    } 
} 
+0

所以没有办法做到这在故事板本身内? –

+0

我的猜测是创建一个'IBDesignable''UIBarButtonItem'子类,它具有一些'IBInspectable'属性,可以帮助重新缩放图像。 –

+1

使用'IBDesignable'完美运作。非常感谢。最终会奖励赏金。 –