2015-07-17 16 views
16

Desidero visualizzare un'immagine nella parte sinistra della barra di navigazione in rapido.per la barra di navigazione voce di elemento swift

Ho provato ad aggiungere una voce di pulsante della barra di navigazione e impostare un'immagine lì.

Il problema è che devo usare un'immagine molto piccola per adattarla bene alla barra di navigazione. Ma fare un'immagine così piccola porta alla pixelizzazione soprattutto sul grande iPhone 6 e 6 Plus.

C'è un modo per utilizzare un'immagine di buona qualità e quindi impostare la cornice per adattarla ai limiti della barra di navigazione?

Il mio tentativo:

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) 

Ho provato a mettere la cornice sull'immagine e poi sulla voce pulsante della barra. Ma si tratta di un errore:

Il tipo di espressione è ambiguo senza più contesto.

+0

Perché non usare catalogo di asset? –

+0

Vinay ha ragione. L'utilizzo di un catalogo di risorse è semplice e automatico. Correggimi se sbaglio, ma uso @ 1, @ 2, @ 3 le seguenti risoluzioni: 44x44, 88x88 e 132x132 pixel. INOLTRE, a volte ho bisogno di correggere la dimensione usando le immagini (se hai il pulsante in IBuilder puoi ripararlo da lì). – MLBDG

risposta

40

Try This

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] 

Per 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 

Ecco azione

func callMethod() { 
//do stuff here 
} 
+1

un problema, l'azione non viene attivata? Ho un'azione di "tryLogout" e un func tryLogout() ma la funzione di logout non viene attivata? – user2363025

+2

oh scuse, vedo che è solo il tipo di evento che deve cambiare – user2363025

+0

Sei sicuro che il secondo è per Swift 3? Ho ricordato che in Swift 3 tutti i parametri del metodo avranno un'etichetta.Ma il tuo 'button.addTarget (self ...' non ha etichetta per il suo primo parametro. –

1

Esiste un modo per utilizzare immagini di dimensioni diverse, a seconda del dispositivo. Si chiama un catalogo delle risorse. Probabilmente ne avrai già uno nel tuo progetto o, in caso contrario, potrai aggiungerne uno con File > New > File > Resource > Asset Catalogue.

All'interno del catalogo delle risorse è possibile avere più "set di immagini" (questi verranno visualizzati in basso a sinistra). Aggiungi un nuovo set di immagini con il '+' in basso. Per ciascun set di immagini, puoi fornire immagini diverse (ad esempio di dimensioni diverse) per ciascuna di @ 1x, @ 2x e @ 3x.

Quindi, per utilizzare una di queste immagini nel codice, è sufficiente utilizzare UIImage(named: "name_of_image_set") - non notare alcuna estensione. L'immagine corretta verrà caricata, a seconda del dispositivo.

Spero che questo aiuti!

+0

il problema era che le immagini più grandi si estendevano oltre la barra di navigazione. Trovato in ordine con la soluzione di Avijit – user2363025

2

di questo codice:

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] 

uscita: enter image description here

Problemi correlati