UINavigationBar Ukryj tekst przycisku wstecz

104

Jak mogę ukryć tekst przycisku Wstecz przed kontrolerem UINavigation? Będę mieć tylko „<”, a nie „<Wstecz”

Nils
źródło
1
nie możesz modyfikować domyślnego tekstu, zamiast tego spróbuj navigationItem.leftBarButtonItem, aby ustawić niestandardowy przycisk Wstecz
BaSha
Zobacz moją odpowiedź poniżej, jeśli chcesz globalnego rozwiązania wykorzystującego proxy wyglądu.
fl034

Odpowiedzi:

107

W konstruktorze interfejsu możesz wybrać element nawigacyjny poprzedniego kontrolera i zmienić Back Buttoncią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 = ""

rebello95
źródło
2
Świetna wskazówka, ta o ustawieniu pustego miejsca w kreatorze interfejsów ... :-D
Felipe Ferri
9
Konstruktor interfejsów i trasy programowe Swift nie działały dla mnie w XCode 8.3.2, Swift 3
agrippa
Możesz sprawdzić moje bardzo proste rozwiązanie do ukrywania wszystkich przycisków wstecz w aplikacji. PS: Wymaga zerowej linii kodu własnego
Pratik Jamariya
2
Jeśli Back Buttonjest już puste w IB, po prostu dodaj spację, aby uzyskać jazdę Backi po prostu pokaż strzałkę.
Tejas K
3
Ta metoda obecnie działa tylko w programie do tworzenia interfejsów. Ustawienie tego z kodu nie działa, zamiast ustawiać tylko tytuł, musisz ustawić cały backBarButtonItem w ten sposób: navigationItem.backBarButtonItem = UIBarButtonItem (title: "", style: .plain, target: nil, action: nil)
Leszek Szary
81

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.

Element nawigacyjny kontrolera widoku Xcode

Przykładowy pasek nawigacji przed i po

Przed Przed

Po Po

Shahzin KS
źródło
7
Działa to doskonale, jeśli jest ustawione w scenorysach. Po prostu upewnij się, że pasek nawigacji zawiera element nawigacji, aby można go było ustawić.
11
W iOS 9 / Xcode 7.3 ustawienie backBarButtonItemprogramowe nie działa, ale ustawienie go za pomocą scenorysu działa.
Scott Gardner
@ScottGardner, ustawienie backBarButtonItemprogramowo działa u mnie w iOS 9.
Suragch
Jeśli nie masz paska nawigacji na ekranie, być może dlatego, że musi być ukryty, możesz dodać element nawigacyjny w scenorysie do poprzedniego kontrolera widoku i ustawić jego przycisk Wstecz na „”.
Martin Berger
Rozwiązanie działało świetnie i bardzo łatwe do wdrożenia w Xcode 9.2 / iOS 11.
Ray Hunter
79

Możesz zaimplementować w UINavigationControllerDelegateten sposób:

Starszy Szybki

func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {
    let item = UIBarButtonItem(title: " ", style: .Plain, target: nil, action: nil)
    viewController.navigationItem.backBarButtonItem = item
}

Swift 4.x

class MyNavigationController: UINavigationController, UINavigationControllerDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.delegate = self
    }

    func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
        let item = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
        viewController.navigationItem.backBarButtonItem = item
    }
}

backBarButtonItemjest nildomyślnie i wpływa na następny wciśnięty kontroler, więc po prostu ustawiasz go dla wszystkich kontrolerów

VoidLess
źródło
6
Dziękuję Ci! To jedyne rozwiązanie, które zadziałało (bez zepsucia czegokolwiek innego) po przejrzeniu 4 zduplikowanych pytań i dziesiątek odpowiedzi.
inket
1
Miałem już podklasę kontrolera nawigacji, którą uczyniłem własnym delegatem, który działał idealnie. Powinien jednak zaktualizować Swift 3.
Dean Kelly
Świetne rozwiązanie dzięki, jedyne, które działało konsekwentnie dla mnie.
Elliott Davies
Woki jak urok.
tounaobun
48

Ustawienie tytułu przycisku Wstecz na @""lub nilnie działa. Musisz ustawić pusty przycisk (bez tytułu lub obrazu):

Cel C

[self.navigationItem setBackBarButtonItem:[[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil]];

Szybki

self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)

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ą pushViewControllermetody)

szakal
źródło
2
dziękuję, działa! In swift: self.navigationItem.backBarButtonItem = UIBarButtonItem (title: "", style: .Plain, target: nil, action: nil)
mostworld77
doskonała odpowiedź… słusznie wskazuje, że sama zmiana tytułu domyślnego backBarButtonItem nie wystarczy. Dodatkowe punkty za wspomnienie, że backBarButtonItem należy ustawić w poprzednim kontrolerze widoku.
Crazed'n'Dazed
30

Innym rozwiązaniem tego problemu w sytuacjach, w których masz wielu kontrolerów widoku, jest użycie UIAppearanceserwera proxy, aby skutecznie ukryć tekst tytułu przycisku Wstecz w następujący sposób:

UIBarButtonItem *navBarButtonAppearance = [UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil];

[navBarButtonAppearance setTitleTextAttributes:@{
    NSFontAttributeName:            [UIFont systemFontOfSize:0.1],
    NSForegroundColorAttributeName: [UIColor clearColor] }
                                      forState:UIControlStateNormal];

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ę, UIBarButtonItemktóra robi to samo (potencjalnie z innym UIAppearanceproxy).

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)

Adam Kaplan
źródło
Było najłatwiejszym rozwiązaniem dla mojego wdrożenia. Dzięki.
Trevor Panhorst,
3
Czy nie obejmuje to również elementów przycisków lewego paska, które nie są przyciskami wstecz?
kevinl
1
Tak, zauważyłem to. „wpływa na wszystkie przyciski paska nawigacyjnego”
Adam Kaplan,
2
czy nie powinno to wpływać na wszystkie inne przyciski w paskach nawigacji, w tym elementy przycisków lewego / prawego paska?
Fyodor Volchyok
Tak, nie określił bardziej kompleksowego wymagania.
Adam Kaplan,
30

Dodaj następujący kod w viewDidLoad lub loadView

self.navigationController.navigationBar.topItem.title = @"";  

Przetestowałem to na iPhonie i iPadzie z iOS 9

samotni
źródło
20
To nie wyczyściło tytułu poprzedniego kontrolera widoku?
CalZone
6
Nie używaj, ponieważ usunie to ostatni tytuł ekranu
evya,
Jeśli chcesz to zrobić z bieżącego kontrolera widoku, aby uniknąć usuwania tytułu z poprzedniego vc, powinieneś raczej zrobić: navigationController? .NavigationBar.topItem? .BackBarButtonItem = UIBarButtonItem (title: "", style: .plain, target: nil, akcja: zero)
Leszek Szary
15

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.

@implementation UINavigationItem (Customization)

/**
 Removes text from all default back buttons so only the arrow or custom image shows up.
 */
-(UIBarButtonItem *)backBarButtonItem
{
    return [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
}

@end

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)

teradyl
źródło
To daje tytuł „Back” nie ukrywa tytułu
Raj Aggrawal
Naprawdę, jak overrideto szybko. Bardzo ciekawe pytanie
Andrey Gagan
@teradyl to najlepsza odpowiedź.
aks.knit1108
@Andrey Gagan, zobacz moją odpowiedź
Abirami Bala
Działa to na iOS 9.0 - 10.3.3, ale na iOS 11+ nie działa.
Sihad Begovic,
14

Próbowałem powyżej i poniżej, ale nie zadziałały. To zadziałało dla mnie:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationController?.navigationBar.topItem?.title = ""
}
catanore
źródło
1
Jeśli chcesz to zrobić z bieżącego kontrolera widoku, aby uniknąć usuwania tytułu z poprzedniego vc, powinieneś raczej zrobić: navigationController? .NavigationBar.topItem? .BackBarButtonItem = UIBarButtonItem (title: "", style: .plain, target: nil, akcja: zero)
Leszek Szary
11

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.

extension UIViewController {
func setupBackButton() {
    let customBackButton = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
    navigationItem.backBarButtonItem = customBackButton
}}

Niestety, jeśli chcesz, aby wszystkie przyciski Wstecz nie miały żadnych tytułów, musisz skonfigurować ten niestandardowy przycisk Wstecz we wszystkich kontrolerach widoku: /

override func viewDidLoad() {
    super.viewDidLoad()

    setupBackButton()
}

Bardzo ważne jest, aby jako tytuł ustawić spację, a nie pusty ciąg.

Cezar Signori
źródło
9

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

Jyothi Babu Pakalz
źródło
2
Ten usunie również tytuł navigationItem
Ilker Baltaci
Zredagowałem twoją odpowiedź na to: self.navigationController?.navigationBar.topItem?.title = " "w Xcode 9 i działałem!
MHSFisher
Jeśli chcesz to zrobić z bieżącego kontrolera widoku, aby uniknąć usuwania tytułu z poprzedniego vc, powinieneś raczej zrobić: navigationController? .NavigationBar.topItem? .BackBarButtonItem = UIBarButtonItem (title: "", style: .plain, target: nil, akcja: zero)
Leszek Szary
8

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:

self.title = @" ";

Działa TYLKO wtedy, gdy poprzedni kontroler widoku nie ma tytułu

ChrisHaze
źródło
@ZevEisenberg upewnij się, że właściwość jest ustawiana przed wyświetleniem w cyklu życia kontrolera widoku. Znaczenie ustawiono w metodach viewDidLoad lub viewWillAppear.
ChrisHaze
1
pamiętaj również o spacji między cudzysłowami.
ChrisHaze
1
Właściwie skończyło się na pracy dla mnie bez spacji; po prostu stary dobry pusty ciąg: @"".
Zev Eisenberg
1
@ZevEisenberg, Kiedy po raz pierwszy wymyśliłem rozwiązanie, było to wcześniej w Xcode 5. Spacja była jedynym sposobem, w jaki działała, dlatego umieściłem ją w przykładowym kodzie. Aktualizacja Xcode 6 musiała go zawierać. Dobrze wiedzieć - dzięki
ChrisHaze
Użyłem również swojego podejścia, które nadal działa i faktycznie usunąłem również standardową strzałkę wstecz.
ChrisHaze,
5

Alternatywny sposób - użyj niestandardowej klasy NavigationBar.

class NavigationBar: UINavigationBar {

    var hideBackItem = true
    private let emptyTitle = ""

    override func layoutSubviews() {
        if let `topItem` = topItem,
            topItem.backBarButtonItem?.title != emptyTitle,
            hideBackItem {
            topItem.backBarButtonItem = UIBarButtonItem(title: emptyTitle, style: .plain, target: nil, action: nil)
        }

        super.layoutSubviews()
    }

}

Oznacza to, że spowoduje to usunięcie z powrotem tytułów całego projektu. Po prostu ustaw niestandardową klasę dla UINavigationController.

LLIAJLbHOu
źródło
4

Ustaw tytuł poprzedniego VC na ciąg znaków ze spacją. a tytuł z przyciskiem wstecz zostanie zastąpiony pojedynczym ciągiem spacji.

Self.title = " "

Ponownie naciśnij przycisk Wstecz, aby przywrócić oryginalny tytuł w widokuWillAppear.

Mohit Kumar
źródło
4

Użyj niestandardowego, NavigationControllerktóry zastępujepushViewController

class NavigationController: UINavigationController {  
  override func pushViewController(_ viewController: UIViewController, animated: Bool) {
    viewController.navigationItem.backBarButtonItem =
      UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
    super.pushViewController(viewController, animated: animated)
  }
}
onmyway133
źródło
4

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:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}
Codetard
źródło
2
Tak! Dziękuję :)
Hews
3

Próbowałem wszystkiego w tym poście. Jedynym działającym rozwiązaniem jest @ VoidLess

Oto ta sama odpowiedź, ale bardziej kompletna

class CustomNavigationController: UINavigationController {

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.delegate = self
    }
}


// MARK:UINavigationControllerDelegate
extension CustomNavigationController {
    func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
        viewController.navigationItem.backBarButtonItem = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
    }
}
Christos Chadjikyriacou
źródło
3

To jest moje rozwiązanie dla iOS11, zmieniam wygląd UIBarButtonItem w applicationDidFinishLaunchingWithOptions:

UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(-100, 0), for:UIBarMetrics.default)

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.

VictorChee
źródło
1
Działa, ale podczas animacji możesz zobaczyć poprzedni tytuł przesuwający się po lewej stronie. Wygląda na trochę wadliwego.
Jonathan,
2

W Swift3,

Jeśli ustawisz ustawienie globalne

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    // ..

    let BarButtonItemAppearance = UIBarButtonItem.appearance()
    BarButtonItemAppearance.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .normal)
    BarButtonItemAppearance.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .highlighted)


    // ...

}
taku_oka
źródło
1
Zwróć uwagę, że spowoduje to również zmianę koloru na przezroczysty dla wszystkich innych przycisków paska, które możesz mieć gdzieś w aplikacji, nie tylko przycisków wstecz.
Leszek Szary
2

Swift 3.1 Możesz to zrobić, implementując metodę delegata UINavigationController.

func navigationController(_ navigationController: UINavigationController, 
                          willShow viewController: UIViewController, animated: Bool) {

    /** It'll hide the Title with back button only,
     ** we'll still get the back arrow image and default functionality.
     */
    let item = UIBarButtonItem(title: " ", style: .plain, target: nil, 
                               action: nil)
    viewController.navigationItem.backBarButtonItem = item
}
SMMoinuddin. Shuvo
źródło
Najlepsza odpowiedź!
evya,
2

Dla tych, którzy chcą ukryć tytuł przycisku wstecz na całym świecie.

Można swizzle viewDidLoadod UIViewControllertak.

+ (void)overrideBackButtonTitle {

    NSError *error;

    // I use `Aspects` for easier swizzling.

    [UIViewController aspect_hookSelector:@selector(viewDidLoad)
                              withOptions:AspectPositionBefore
                               usingBlock:^(id<AspectInfo> aspectInfo)
    {

        UIViewController *vc = (UIViewController *)aspectInfo.instance;

        // Check whether this class is my app's view controller or not.
        // We don't want to override this for Apple's view controllers,
        // or view controllers from external framework.

        NSString *className = NSStringFromClass([vc class]);
        Class class = [NSBundle.mainBundle classNamed:className];
        if (!class) {
           return;
        }

        UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStylePlain target:nil action:nil];
        vc.navigationItem.backBarButtonItem = backButton;

    } error:&error];

    if (error) {
        NSLog(@"%s error: %@", __FUNCTION__, error.localizedDescription);
    }

}

Stosowanie:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [[self class] overrideBackButtonTitle];
    return YES;
}
nRewik
źródło
2

Jeśli celujesz w system iOS 13 lub nowszy, możesz użyć tego nowego interfejsu API, aby globalnie ukryć tytuł przycisku Wstecz .

let backButtonAppearance = UIBarButtonItemAppearance()
backButtonAppearance.normal.titleTextAttributes = [.foregroundColor: UIColor.clear]

UINavigationBar.appearance().standardAppearance.backButtonAppearance = backButtonAppearance
UINavigationBar.appearance().compactAppearance.backButtonAppearance = backButtonAppearance
UINavigationBar.appearance().scrollEdgeAppearance.backButtonAppearance = backButtonAppearance
fl034
źródło
1
To nie jest optymalne. Jeśli użytkownik dotknie etykiety z czystym tekstem, akcja wstecz jest nadal wyzwalana.
dvdblk
1

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.

Amy.R
źródło
1
Aktualizacja do tego: to działa, ale jest dziwne opóźnienie w ładowaniu, które mi przeszkadza. Teraz dodałem to „niech BarButtonItemAppearance = UIBarButtonItem.appearance () BarButtonItemAppearance.setTitleTextAttributes ([NSAttributedStringKey.foregroundColor: UIColor.clear], dla: .normal)” w delegacie aplikacji didLaunch!
Amy.R
0

W iOS 11 odkryliśmy, że ustawienie UIBarButtonItemczcionki / 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:

+ (void)load {
    if (@available(iOS 11, *)) {
        [NSClassFromString(@"_UIBackButtonContainerView")     jr_swizzleMethod:@selector(addSubview:) withMethod:@selector(MyiOS11BackButtonNoTextTrick_addSubview:) error:nil];
    }
}

- (void)MyiOS11BackButtonNoTextTrick_addSubview:(UIView *)view {
    view.alpha = 0;
    if ([view isKindOfClass:[UIButton class]]) {
        UIButton *button = (id)view;
        [button setTitle:@" " forState:UIControlStateNormal];
    }
    [self MyiOS11BackButtonNoTextTrick_addSubview:view];
}
sbhhbs
źródło
0
-(void)setNavigationItems{
     UIBarButtonItem *leftBarButtonItem=[[UIBarButtonItem alloc]initWithTitle:@"**Your title here**" style:UIBarButtonItemStyleBordered target:self action:@selector(backButtonClicked)];   
     self.navigationController.navigationBar.topItem.backBarButtonItem=leftBarButtonItem;
}
-(void)backButtonClicked{
    [self.navigationController popViewControllerAnimated:YES];
}
niku
źródło
0

Tekst z tyłu pochodzi z ostatniego kontrolera widoku navigationItem.title, i navigationItem.titlejest automatycznie ustawiany przez self.title. Tak prostym sposobem rozwiązania problemu jest hak setTitle:, upewnij sięnavigationItem.title = @""

Wpisz ten kod na, żeby AppDelegate.mwszystko było w porządku。

    [UIViewController aspect_hookSelector:@selector(setTitle:)
                              withOptions:AspectPositionAfter
                               usingBlock:^(id<AspectInfo> aspectInfo, NSString *title) {
        UIViewController *vc = aspectInfo.instance;
        vc.navigationItem.titleView = ({
            UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
            titleLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];
            titleLabel.text = title;
            titleLabel;
        });
        vc.navigationItem.title = @"";
    } error:NULL];

Więcej szczegółów na https://www.jianshu.com/p/071bc50f1475(Simple Chinease)

fengxing
źródło
0

Moje rozwiązanie: - XCode: 10.2.1 - Swift: 5

  • Kontroler widoku nadrzędnego:
    • self.title = „”
  • Kontroler widoku dziecka:
    • self.navigationItem.title = "Twój tytuł" // aby ustawić tytuł dla kontrolera widoku
PhuocLuong
źródło
0

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

private func setupNavBar() {
    let appearance = UINavigationBarAppearance()
    appearance.configureWithDefaultBackground()
    
    let backButtonAppearance = UIBarButtonItemAppearance()
    backButtonAppearance.normal.titleTextAttributes = [.font: UIFont(name: "Arial", size: 0)!]
    appearance.backButtonAppearance = backButtonAppearance

    navigationItem.standardAppearance = appearance
    navigationItem.scrollEdgeAppearance = appearance
    navigationItem.compactAppearance = appearance
}
Pakchoiandbacon
źródło
-1

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.

UIBarButtonItem.appearance().setBackButtonBackgroundImage(#imageLiteral(resourceName: "transparent"), for: .normal, barMetrics: .default)
Lalit Kumar
źródło
-2

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.

    if
        let UIModernBarButton = NSClassFromString("_UIModernBarButton") as? UIButton.Type,
        let UIBackButtonContainerView = NSClassFromString("_UIBackButtonContainerView") as? UIView.Type {

        let backButton = UIModernBarButton.appearance(whenContainedInInstancesOf: [UIBackButtonContainerView.self])
        backButton.setTitleColor(.clear, for: .normal)
    }
Patrick
źródło
Może to spowodować odrzucenie aplikacji w recenzji App Store, ponieważ zarówno UIModernBarButton, jak i UIBackButtonContainerView są prywatnymi interfejsami API.
Groot
Dzięki @Groot, dodałem ostrzeżenie.
Patrick
-5

Wersja Swift, działa doskonale globalnie:

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Normal)
        UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Highlighted)

        return true
    }
PeiweiChen
źródło
7
Należy dodać, że spowoduje to ukrycie całego tekstu również rightBarButtons i leftBarButtons, które nie wracają.
limfinity
to nie jest solution. Jak wskazał @limfinity, zmieni to uniwersalnie dla wszystkich UIBarButtonItem w całej aplikacji
Danut Pralea
zgadzam się z @limfinity i Danutem Praleą, to ukryje cały tekst UIBarButtonItem w całej aplikacji
Pratik Jamariya