2013-04-27 34 views
15

Chcę ustawić przycisk wstecz w moim UINavigationBar do tego zdjęcia:Ustawienie paska nawigacji Wstecz obraz

enter image description here

nie chcę obraz ma być osadzony w standardzie przycisk BACK obrazu, I po prostu chcę, żeby ten obraz się pojawił.

wiem od patrząc na inne pytania, które można używać:

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

aby ustawić obraz tła przycisku Wstecz. Ale to powoduje, że obraz jest rozciągnięty, a ten konkretny obraz nie jest, o ile mogę powiedzieć, odpowiedni do rozciągnięcia.

Czy istnieje sposób, aby zastąpić obraz przycisku z powrotem moim obrazem?

Obsługuję system iOS 5.0 i nowsze.

Odpowiedz

5

Od docs dla UIBarButtonItem setBackButtonBackgroundImage:forState:barMetrics::

Do dobrych wyników, backgroundImage musi być rozciągliwy obrazu.

Rozciągnij więc. To znaczy. określić, które części obrazu można rozciągnąć, a co ważniejsze, które części nie mogą być rozciągnięte. W twoim przypadku będą to krawędzie obrazu (część nie zawierająca strzałki).

UIImage resizableImageWithCapInsets:

Alternatywą jest dostarczanie szeregu obrazów (po jednym dla każdej metryki bar), która jest od rozmiaru, który oznacza, że ​​nie trzeba być skalowane. raywenderlich user-interface-customization. Ale nadal będziesz chciał, aby obraz był rozciągliwy, abyś miał kontrolę nad tym, co się dzieje.

Jeśli nie możesz znaleźć specyfikacji rozciągania, która działa, twoja pozycja zastępcza polega na utworzeniu elementu szablonu dla każdego wystąpienia każdego kontrolera widoku i ustawienie go jako backBarButtonItem dla elementu nawigacyjnego.

+0

Dzięki za odpowiedź i link dokumentacji. Jestem zaznajomiony z tworzeniem rozciągliwych obrazów, ale z mojego zdjęcia widać, że nie będzie dobrze wyglądać, jeśli rozciągnie się poziomo. Chcę wiedzieć, czy mogę zastąpić obraz przycisku, a nie tylko ustawić obraz tła. – Darren

+0

Podczas tworzenia rozciągliwego obrazu określasz, które części są i nie są rozciągnięte. Musisz tylko ustawić, że sekcja obrazu zawierającego strzałkę nie jest rozciągnięta, a krawędzie wokół niej są. – Wain

+0

Och, widzę, przepraszam, źle odczytałem twoją odpowiedź. Ale czy nie można rozciągnąć środka obrazu i pozwolić na rozciągnięcie krawędzi? Myślałem, że resizableImageWithCapInsets pozwoli ci ustawić krawędzie obrazu, który nie będzie rozciągnięty. Jak mogę utworzyć obraz, w którym krawędzie są rozciągliwe, ale środek nie jest? – Darren

39

Od czasu iOS 7+ należy użyć właściwości backIndicatorImage z UINavigationBar, aby ustawić niestandardowy obraz wskaźnika. Musisz również podać backIndicatorTransitionMaskImage (możesz użyć tego samego obrazu dla obu).

Swift:

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

Cel C:

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

Dzięki za zaktualizowane informacje. – Darren

2

wersja SWIFT -

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) 

umieścić w tym viewDidLoad()

1

Dla Swift 3

W viewDidLoad wklej ten

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

utworzyć następującą funkcję,

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