2013-04-27 10 views
15

ich die Zurück-Button in meinem UINavigationBar auf dieses Bild setzen will:Einstellung Navigationsleiste Zurück-Taste Bild

enter image description here

Ich mag nicht das Bild in der Standard-Zurück-Taste Bild eingebettet werden, ich möchte nur, dass dieses Bild angezeigt wird.

Ich weiß, in anderen Fragen suchen, die ich verwenden kann:

[[UIBarButtonItem appearance] setBackButtonBackgroundImage:barButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

das Hintergrundbild der Zurück-Taste einzustellen. Aber das führt dazu, dass das Bild gestreckt wird, und dieses bestimmte Bild ist nicht, soweit ich es beurteilen kann, geeignet, gestreckt zu werden.

Gibt es eine Möglichkeit, dass ich das Bild mit der Schaltfläche "Zurück" durch mein Bild ersetzen kann?

Ich unterstütze iOS 5.0 und höher.

Antwort

5

Aus der Dokumentation für UIBarButtonItem setBackButtonBackgroundImage:forState:barMetrics::

Für gute Ergebnisse Background muss ein dehnbares Bild sein.

Also, machen Sie es dehnbar. I.e. Geben Sie an, welche Teile des Bildes gestreckt werden können und, noch wichtiger, welche Teile nicht gedehnt werden können. In Ihrem Fall sind dies die Kanten des Bildes (der Teil, der den Pfeil nicht enthält).

UIImage resizableImageWithCapInsets:

Die Alternative ist, eine Anzahl von Bildern (eines für jede bar metric) zu liefern, die von einer Größe ist, das heißt, es wird nicht skaliert werden muß. raywenderlich user-interface-customization. Aber Sie werden das Bild immer noch dehnbar machen wollen, damit Sie die Kontrolle darüber haben, was passiert.

Wenn Sie keine Stretch-Spec finden, die funktioniert, besteht Ihre Fallback-Position darin, für jede Instanz jedes View-Controllers ein Template-Back-Button-Element zu erstellen und als Navigationselement backBarButtonItem festzulegen.

+0

Vielen Dank für Ihre Antwort und die Dokumentation Link. Ich bin vertraut mit dehnbaren Bildern, aber Sie können aus meinem Bild sehen, dass es nicht gut aussehen wird, wenn es horizontal gestreckt wird. Ich möchte wissen, ob ich das Knopfbild ersetzen kann, nicht nur das Hintergrundbild einstellen. – Darren

+0

Wenn Sie das dehnbare Bild erstellen, geben Sie an, welche Teile gestreckt sind und nicht. Sie müssen nur festlegen, dass der Abschnitt des Bildes, der den Pfeil enthält, nicht gestreckt ist und die Kanten um ihn herum sind. – Wain

+0

Oh, ich verstehe, Entschuldigung, dass ich deine Antwort falsch gelesen habe. Aber ist es möglich, die Mitte eines Bildes nicht zu dehnen und das Strecken der Kanten zu erlauben? Ich dachte, resizableImageWithCapInsets erlaubt Ihnen, Kanten des Bildes zu setzen, die nicht gestreckt werden. Wie kann ich ein Bild erstellen, in dem die Kanten dehnbar sind, das Zentrum aber nicht? – Darren

39

Seit iOS 7+ sollten Sie backIndicatorImage Eigenschaft von UINavigationBar verwenden, um Ihr benutzerdefiniertes Indikatorbild festzulegen. Auch müssen Sie backIndicatorTransitionMaskImage bereitstellen (Sie können das gleiche Bild für beide verwenden).

Swift:

UINavigationBar.appearance().backIndicatorImage = UIImage(named: "back-button-image") 
UINavigationBar.appearance().backIndicatorTransitionMaskImage = UIImage(named: "back-button-image") 

Objective-C:

[[UINavigationBar appearance] setBackIndicatorImage:[UIImage imageNamed:@"back-button-image"]]; 
[[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"back-button-image"]]; 
+0

Danke für die aktualisierte Info. – Darren

2

swift Version: -

self.navigationController?.navigationBar.backIndicatorImage = UIImage(named: "[email protected]") 
    self.navigationController?.navigationBar.backIndicatorTransitionMaskImage = UIImage(named: "[email protected]") 
    self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.Plain, target: nil, action: nil) 

dies in viewDidLoad put()

1

Für Swift 3

In ViewDidLoad fügen Sie diesen

let backBtn = UIBarButtonItem() 
let image: UIImage = UIImage(named: "your_image_name")! 
backBtn.image = image 
backBtn.action = #selector(popSelf) 
backBtn.target = self 
navigationItem.leftBarButtonItem = backBtn 

folgende Funktion erstellen,

func popSelf() { 
    navigationController?.popViewController(animated: true) 
    // do your stuff if you needed 
}