2017-10-10 4 views
5

Xcodeプロジェクトの画像資産ファイルにPDFファイルがあります。私はそのPDF画像を使用するバーボタンアイテムを作成しようとしています。しかし、Interface Builderのイメージプロパティをイメージに設定するたびに、ほとんどのタブバーを引き継ぎ、タイトルを削除します。XcodeバーボタンでPDF画像を使用するアイテムサイズが大きすぎます

私は、システムアイテムの停止を伴う左のバーボタンアイテムを持っています。したがって、Xアイコンのように見えます。私は自分の設定のPDF画像と同じことを右側にしたいと思います。

Interface Builderでこのサイジングの問題を修正する方法はありますか?これをコードでどのように修正できますか?

答えて

6

コードを使用画像サイズが大きすぎる場合、UIControlのレンダリング/設定の前にUIImageのサイズを変更します。私は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'を使うと完全に動作しました。本当にありがとう。最後に賞金を授与します。 –

関連する問題