Jak mogę ukryć tekst przycisku Wstecz przed kontrolerem UINavigation? Będę mieć tylko „<”, a nie „<Wstecz”
104
Jak mogę ukryć tekst przycisku Wstecz przed kontrolerem UINavigation? Będę mieć tylko „<”, a nie „<Wstecz”
Odpowiedzi:
W konstruktorze interfejsu możesz wybrać element nawigacyjny poprzedniego kontrolera i zmienić
Back Button
ciąg na taki, jak ma wyglądać przycisk Wstecz. Jeśli na przykład chcesz, aby było puste, po prostu wstaw spację.Możesz go również zmienić za pomocą tej linii kodu:
[self.navigationItem.backBarButtonItem setTitle:@"Title here"];
Lub w Swift :
self.navigationItem.backBarButtonItem?.title = ""
źródło
Back Button
jest już puste w IB, po prostu dodaj spację, aby uzyskać jazdęBack
i po prostu pokaż strzałkę.Możesz to również zrobić za pomocą scenorysu. W inspektorze atrybutów elementu nawigacyjnego poprzedniego kontrolera możesz ustawić "" w polu przycisku Wstecz. Zobacz zdjęcie poniżej. Zastąp „Tutaj Twój tytuł” na „”. W ten sposób osiągniesz pożądany rezultat. Nie musisz już mieszać z „tytułem”.
Programowo możesz użyć
[self.navigationItem.backBarButtonItem setTitle:@" "];
gdzie self oznacza kontroler, który wypycha żądany kontroler widoku.
Przykładowy pasek nawigacji przed i po
Przed
Po
źródło
backBarButtonItem
programowe nie działa, ale ustawienie go za pomocą scenorysu działa.backBarButtonItem
programowo działa u mnie w iOS 9.Możesz zaimplementować w
UINavigationControllerDelegate
ten sposób:Starszy Szybki
Swift 4.x
backBarButtonItem
jestnil
domyślnie i wpływa na następny wciśnięty kontroler, więc po prostu ustawiasz go dla wszystkich kontrolerówźródło
Ustawienie tytułu przycisku Wstecz na
@""
lubnil
nie działa. Musisz ustawić pusty przycisk (bez tytułu lub obrazu):Cel C
Szybki
Należy to zrobić na kontrolerze widoku, który znajduje się na górze kontrolera widoku w stosie nawigacji (tj. Z miejsca, w którym przechodzisz do swojego VC za pomocą
pushViewController
metody)źródło
Innym rozwiązaniem tego problemu w sytuacjach, w których masz wielu kontrolerów widoku, jest użycie
UIAppearance
serwera proxy, aby skutecznie ukryć tekst tytułu przycisku Wstecz w następujący sposób:To rozwiązanie spowoduje renderowanie tekstu jako niewielkiej, wyraźnej kropki, podobnie jak w przypadku ręcznego ustawiania tytułu przycisku Wstecz na
@" "
, z tą różnicą, że ma wpływ na wszystkie przyciski paska nawigacji.Nie sugeruję tego jako ogólnego rozwiązania problemu, ponieważ ma to wpływ na wszystkie przyciski paska nawigacji. Odwraca paradygmat, dzięki czemu możesz wybrać, kiedy mają być wyświetlane tytuły przycisków, a nie kiedy je ukrywać .
Aby wybrać, kiedy mają być wyświetlane tytuły, przywróć ręcznie atrybuty tekstu tytułu zgodnie z potrzebami lub utwórz specjalną podklasę,
UIBarButtonItem
która robi to samo (potencjalnie z innymUIAppearance
proxy).Jeśli masz aplikację, w której większość tytułów przycisków wstecz musi być ukryta, a tylko kilka (lub żaden) z przycisków nawigacyjnych to przyciski systemowe z tytułami, może to być dla Ciebie!
(Uwaga: zmiana rozmiaru czcionki jest konieczna, mimo że kolor tekstu jest wyraźny, aby mieć pewność, że długie tytuły nie spowodują przesunięcia tytułu środkowego paska nawigacyjnego)
źródło
Dodaj następujący kod w viewDidLoad lub loadView
Przetestowałem to na iPhonie i iPadzie z iOS 9
źródło
Możesz dodać tę kategorię Cel-C, aby wszystkie przyciski „Wstecz” utworzone przez kontroler nawigacji nie miały tekstu. Właśnie dodałem go do mojego pliku AppDelegate.m.
PS - (Nie wiem, jak sprawić, by to rozszerzenie działało w Swift, zawierało dziwne błędy. Mile widziane zmiany, aby dodać wersję Swift)
źródło
override
to szybko. Bardzo ciekawe pytaniePróbowałem powyżej i poniżej, ale nie zadziałały. To zadziałało dla mnie:
źródło
Jedyną rzeczą, która działa bez efektów ubocznych, jest utworzenie niestandardowego przycisku Wstecz. Dopóki nie podasz niestandardowej akcji, działa nawet gest slajdu.
Niestety, jeśli chcesz, aby wszystkie przyciski Wstecz nie miały żadnych tytułów, musisz skonfigurować ten niestandardowy przycisk Wstecz we wszystkich kontrolerach widoku: /
Bardzo ważne jest, aby jako tytuł ustawić spację, a nie pusty ciąg.
źródło
aby programowo usunąć tekst z przycisku wstecznego, użyty poniżej kodu będzie działał z xcode7 i nowszymi.
self.navigationController.navigationBar.topItem.title = @ "";
lub
manualLy w scenorysach, wybierz pasek nawigacji na kontrolerze widoku i wstaw „” w tekście przycisku Wstecz.
to zadziała. dzięki
źródło
self.navigationController?.navigationBar.topItem?.title = " "
w Xcode 9 i działałem!Obecna odpowiedź nie działa. Chciałem całkowicie usunąć tytuł , ale tekst „wstecz” nie znikał.
Wróć do poprzedniego kontrolera widoku i ustaw jego właściwość title:
Działa TYLKO wtedy, gdy poprzedni kontroler widoku nie ma tytułu
źródło
@""
.Alternatywny sposób - użyj niestandardowej klasy NavigationBar.
Oznacza to, że spowoduje to usunięcie z powrotem tytułów całego projektu. Po prostu ustaw niestandardową klasę dla UINavigationController.
źródło
Ustaw tytuł poprzedniego VC na ciąg znaków ze spacją. a tytuł z przyciskiem wstecz zostanie zastąpiony pojedynczym ciągiem spacji.
Ponownie naciśnij przycisk Wstecz, aby przywrócić oryginalny tytuł w widokuWillAppear.
źródło
Użyj niestandardowego,
NavigationController
który zastępujepushViewController
źródło
Wiele już odpowiedzi, oto moje dwa grosze na ten temat. Uważam, że to podejście jest naprawdę solidne. Musisz tylko umieścić to w viewController przed segue.
Swift 4:
źródło
Próbowałem wszystkiego w tym poście. Jedynym działającym rozwiązaniem jest @ VoidLess
Oto ta sama odpowiedź, ale bardziej kompletna
źródło
To jest moje rozwiązanie dla iOS11, zmieniam wygląd UIBarButtonItem w applicationDidFinishLaunchingWithOptions:
Nie możesz zmienić przesunięcia Y, ponieważ zmieni to również pozycję przycisku paska wstecznego w iOS11, ale jest OK w iOS10 i poniżej.
źródło
W Swift3,
Jeśli ustawisz ustawienie globalne
źródło
Swift 3.1 Możesz to zrobić, implementując metodę delegata UINavigationController.
źródło
Dla tych, którzy chcą ukryć tytuł przycisku wstecz na całym świecie.
Można swizzle
viewDidLoad
odUIViewController
tak.Stosowanie:
źródło
Jeśli celujesz w system iOS 13 lub nowszy, możesz użyć tego nowego interfejsu API, aby globalnie ukryć tytuł przycisku Wstecz .
źródło
Walczyłem z tym, ponieważ miałem niestandardowy kontroler nawigacyjny. Udało mi się usunąć tekst elementu z tyłu we wszystkich kontrolerach widoku z tym kodem w mojej niestandardowej klasie kontrolera nawigacji
override func viewDidLayoutSubviews() { self.navigationBar.backItem?.title = "" }
Spowoduje to usunięcie wszystkich tytułów elementów z tyłu za pomocą tego niestandardowego kontrolera nawigacji.
źródło
W iOS 11 odkryliśmy, że ustawienie
UIBarButtonItem
czcionki / koloru tekstu wyglądu na bardzo małą wartość lub wyraźny kolor spowoduje zniknięcie innego elementu paska (system nie honoruje już klasy elementu UIBarButton, konwertuje go na_UIModernBarButton
). Również ustawienie przesunięcia tylnego tekstu poza ekran spowoduje miganie podczas interaktywnego popu.Więc zawaliliśmy
addSubView
:źródło
źródło
Tekst z tyłu pochodzi z ostatniego kontrolera widoku
navigationItem.title
, inavigationItem.title
jest automatycznie ustawiany przezself.title
. Tak prostym sposobem rozwiązania problemu jest haksetTitle:
, upewnij sięnavigationItem.title = @""
Wpisz ten kod na, żeby
AppDelegate.m
wszystko było w porządku。Więcej szczegółów na https://www.jianshu.com/p/071bc50f1475(Simple Chinease)
źródło
Moje rozwiązanie: - XCode: 10.2.1 - Swift: 5
źródło
XCode 11.5 Swift 5
Bardzo prostym - choć może trochę hackerskim - sposobem zrobienia tego programowo, jeśli nie potrzebujesz niestandardowego przycisku Wstecz, jest ustawienie rozmiaru czcionki równego zeru w kontrolerze widoku, który wkładasz na stos, wywołując coś takiego from viewDidLoad
źródło
Wreszcie znalazłem idealne rozwiązanie, aby ukryć domyślny tekst w całej aplikacji.
Po prostu dodaj jeden przezroczysty obraz i dodaj następujący kod w swoim AppDelegate.
źródło
Poniższa metoda działa w systemie iOS 11 i nie ulega awarii w innych wersjach systemu iOS. Może to spowodować odrzucenie aplikacji w recenzji App Store, ponieważ zarówno UIModernBarButton, jak i UIBackButtonContainerView są prywatnymi interfejsami API. Umieść w AppDelegate.
źródło
Wersja Swift, działa doskonale globalnie:
źródło
solution
. Jak wskazał @limfinity, zmieni to uniwersalnie dla wszystkich UIBarButtonItem w całej aplikacji