2016-05-31 17 views
18

Potrzebuję dostosować wygląd przycisku Wstecz w projekcie Swift.Swift Niestandardowy przycisk NavBar Wstecz Obraz i tekst

Oto co mam: Default Back Button

Oto, czego chcę: Custom Back Button

Próbowałem tworzyć własne UIBarButtonItem ale nie mogę dowiedzieć się, jak uzyskać obraz, aby być obok tekst, a nie jako tło lub zamiennik tekstu.

let backButton = UIBarButtonItem(title: "Custom", style: .Plain, target: self, action: nil ) 
//backButton.image = UIImage(named: "imageName") //Replaces title 
backButton.setBackgroundImage(UIImage(named: "imageName"), forState: .Normal, barMetrics: .Default) // Stretches image 
navigationItem.setLeftBarButtonItem(backButton, animated: false) 
+0

@Randy To znaczy, uczynić UIView i dodać etykietę i ImageView i ustawić, że? – Conor

Odpowiedz

31

można zrobić coś takiego:

let yourBackImage = UIImage(named: "back_button_image") 
self.navigationController?.navigationBar.backIndicatorImage = yourBackImage 
self.navigationController?.navigationBar.backIndicatorTransitionMaskImage = yourBackImage 
self.navigationController?.navigationBar.backItem?.title = "Custom" 

obrazu będą mieli niepowtarzalną barwę chociaż

+1

Przeważnie pracował, tytuł przycisku się nie zmienił. niech yourBackImage = UIImage (o nazwie: "back_button_image") self.navigationController .navigationBar.backIndicatorImage = yourBackImage self.navigationController .navigationBar.backIndicatorTransitionMaskImage = yourBackImage self.navigationController .navigationBar.backItem .title = "??? Niestandardowy " – Conor

+0

Mój przycisk Wstecz kończy się na środku ekranu? jakieś pomysły? –

4

Dla Wstecz obrazu:

  • Przez ten tutorial: (ale nie działa dla mnie)

    UINavigationBar.appearance().backIndicatorImage = UIImage(named: "imageName") 
    
  • ale to stack answer: (pracował dla mnie)

    let backButtonImage = UIImage(named: "back-button-image") 
    backButtonImage = backButtonImage?.stretchableImageWithLeftCapWidth(15, topCapHeight: 30) 
    UIBarButtonItem.appearance().setBackButtonBackgroundImage(backButtonImage, forState: .Normal, barMetrics: .Default) 
    

I czcionki, zakładając chcesz czcionka pasujące do całego paska nawigacji (aktualnie w użyciu)

if let font = UIFont(name: "Avenir-Book", size: 22) { 
    UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName: font] 
} 
17

Uwaga: Proszę pamiętać, że przycisk Back b wydłuża się do źródła ViewController, a nie do docelowego ViewController. W ten sposób, zmiana musi odbywać się w źródle VC, co przekłada się na cały widok w panelu nawigacyjnego

fragmentu kodu:

let backImage = UIImage(named: "icon-back") 

self.navigationController?.navigationBar.backIndicatorImage = backImage 

self.navigationController?.navigationBar.backIndicatorTransitionMaskImage = backImage 

/*** If needed Assign Title Here ***/ 
self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.plain, target: nil, action: nil) 
+0

to działa, ALE, jak ustawić ramkę obrazu. Właśnie z tym kodem cały obraz wychodzi poza ramy. – Annjawn

+0

@ Annjawn obraz może być korygowane w ten sposób: UIImage (o nazwie: "back-icon")? StretchableImage (withLeftCapWidth: 15, topCapHeight: 30), jak pokazano w odpowiedzi Idana poniżej – Vitalii

2

szybkiej 3

extension UIViewController { 

     func setBackButton(){ 
      let yourBackImage = UIImage(named: "backbutton") 
      navigationController?.navigationBar.backIndicatorImage = yourBackImage 
      navigationController?.navigationBar.backIndicatorTransitionMaskImage = yourBackImage 
     } 

    } 
1

szybki 4

W moim przypadku musiałem mieć tylko obraz przycisku, bez żadnego tekstu. Mam nadzieję, że przyda się to komuś.

let imgBackArrow = UIImage(named: "back_arrow_32") 

navigationController?.navigationBar.backIndicatorImage = imgBackArrow 
navigationController?.navigationBar.backIndicatorTransitionMaskImage = imgBackArrow 

navigationItem.leftItemsSupplementBackButton = true 
navigationItem.leftBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: self, action: nil) 
1

Posiadanie przycisku na pasku nawigacyjnym z obrazem i tekstem jest dość trudne. Zwłaszcza po tym, jak wprowadzili nowy ból głowy z pozycją UIBarButtonItem w systemie iOS 11: iOS 11 - UIBarButtonItem horizontal position

Możesz zrobić albo przycisk z obrazem albo przycisk z tekstem, ale nie przycisk z tymi dwoma. Próbowałem nawet dwóch UIBarButtonItems razem, jednego z obrazem i innymi z tekstem - nadal nie wygląda dobrze i ich UIStackView nie można łatwo uzyskać do modyfikacji.

Niespodziewanie znaleziono zwykły proste rozwiązanie:

1) Wygląd przycisku jako widok w interfejsie Builder. W moim przypadku jest to obiekt docelowy UIViewController i dostępny przez IBOutlet z prostotą:

2) Ustaw ograniczenie ograniczające wiodącą przestrzeń, aby obraz był ujemny, możesz także ustawić kolor tła widoku na .clear.

enter image description here

3) używać go:

@IBOutlet var backButtonView: UIView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let backButton = UIBarButtonItem(customView: self.backButtonView) 
    self.backButtonView.heightAnchor.constraint(equalToConstant: 45).isActive = true 
    self.backButtonView.widthAnchor.constraint(equalToConstant: 75).isActive = true 
    self.navigationItem.leftBarButtonItem = backButton 
} 

to wszystko. Nie musisz używać triku z ujemnym odstępnikiem na iOS 10 lub sztuczką z imageInsets na iOS 11 (który działa tylko, jeśli masz obraz i nie działa na obraz + tekst, BTW).

enter image description here

Powiązane problemy