UINavigationBar Ukryj tekst przycisku wstecz


104

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


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 = ""


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


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


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)


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)


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


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)


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 = ""
}

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.


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


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


@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.


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.


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)
  }
}

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)
}

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)
    }
}

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.


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)


    // ...

}

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
}

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;
}

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

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.


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];
}

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];
}

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)


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

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
}

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

-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)
    }

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
    }

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.