Swiftのナビゲーションバーの左側に画像を表示したい。
ナビゲーションバーボタンアイテムを追加して、そこに画像を設定しようとしました。
問題は、ナビゲーションバーにうまく収まるように、本当に小さな画像を使用する必要があることです。しかし、このような小さな画像を作成すると、特に大きな電話のiPhone 6および6 Plusでピクセル化が発生します。
良質の画像を使用し、ナビゲーションバーの境界内に収まるようにフレームを設定する方法はありますか?
私の試み:
var image = UIImage(named: "Harp.png")
image = image?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
self.navigationItem.leftBarButtonItem = UIBarButtonItem(image: image, style: UIBarButtonItemStyle.Plain, target: nil, action: nil)
self.navigationItem.leftBarButtonItem.frame = CGRectMake(0, 0, 53, 31)
//image.frame = CGRectMake(0, 0, 53, 31)
最初に画像にフレームを配置してから、バーボタン項目にフレームを配置してみました。しかし、これはエラーを投げています:
表現のタイプは、文脈がなければあいまいです。
これを試して
let button = UIButton(type: UIButtonType.Custom)
button.setImage(UIImage(named: "yourImageName.png"), forState: UIControlState.Normal)
button.addTarget(self, action:Selector("callMethod"), forControlEvents: UIControlEvents.TouchDragInside)
button.frame=CGRectMake(0, 0, 30, 30)
let barButton = UIBarButtonItem(customView: button)
self.navigationItem.leftBarButtonItems = [newBackButton,barButton]
Swift 3
let button = UIButton.init(type: .custom)
button.setImage(UIImage.init(named: "yourImageName.png"), for: UIControlState.normal)
button.addTarget(self, action:#selector(ViewController.callMethod), for:.touchUpInside)
button.frame = CGRect.init(x: 0, y: 0, width: 30, height: 30) //CGRectMake(0, 0, 30, 30)
let barButton = UIBarButtonItem.init(customView: button)
self.navigationItem.leftBarButtonItem = barButton
ここにアクションがあります
func callMethod() {
//do stuff here
}
次のコードを使用します:
self.navigationItem.leftBarButtonItem = nil
let button = UIButton(type: .custom)
button.setImage(UIImage (named: "ChatTab"), for: .normal)
button.frame = CGRect(x: 0.0, y: 0.0, width: 35.0, height: 35.0)
//button.addTarget(target, action: nil, for: .touchUpInside)
let barButtonItem = UIBarButtonItem(customView: button)
let button2 = UIButton(type: .custom)
button2.setImage(UIImage (named: "ActivityTab"), for: .normal)
button2.frame = CGRect(x: 0.0, y: 0.0, width: 35.0, height: 35.0)
//button.addTarget(target, action: nil, for: .touchUpInside)
let barButtonItem2 = UIBarButtonItem(customView: button2)
self.navigationItem.rightBarButtonItems = [barButtonItem, barButtonItem2]
Swift 4および5:
let imageView = UIImageView(image: UIImage(named: "Harp"))
let buttonItem = UIBarButtonItem(customView: imageView)
self.navigationItem.leftBarButtonItem = buttonItem
デバイスに応じて、異なるサイズの画像を使用する方法があります。アセットカタログと呼ばれます。おそらくプロジェクト内に既に存在するか、そうでない場合は_File > New > File > Resource > Asset Catalogue
_で追加できます。
アセットカタログ内には、複数の「イメージセット」を含めることができます(これらは左側に表示されます)。下部に「+」が付いた新しい画像セットを追加します。画像セットごとに、@ 1x、@ 2x、および@ 3xのそれぞれに異なる画像(異なるサイズなど)を提供できます。
次に、これらの画像のいずれかをコードで使用するには、単にUIImage(named: "name_of_image_set")
を使用します-拡張子がないことに注意してください。デバイスに応じて、正しいイメージがロードされます。
お役に立てれば!