UINavigationBar Schaltflächen-Text ausblenden

103

Wie kann ich den Text der Zurück-Schaltfläche vor einem UINavigation-Controller ausblenden? Ich werde nur das "<" und nicht das "<Zurück" haben

Nils
quelle
1
Sie können den Standardtext nicht ändern, sondern versuchen Sie stattdessen mit navigationItem.leftBarButtonItem, um die benutzerdefinierte Zurück-Schaltfläche
festzulegen
Siehe meine Antwort unten, wenn Sie eine globale Lösung mit einem Erscheinungs-Proxy wünschen.
fl034

Antworten:

106

Im Interface Builder können Sie das Navigationselement des vorherigen Controllers auswählen und die Back ButtonZeichenfolge so ändern, dass die Schaltfläche "Zurück" angezeigt wird. Wenn Sie es beispielsweise leer lassen möchten, setzen Sie einfach ein Leerzeichen.

Sie können es auch mit dieser Codezeile ändern :

[self.navigationItem.backBarButtonItem setTitle:@"Title here"];

Oder in Swift :

self.navigationItem.backBarButtonItem?.title = ""

rebello95
quelle
2
Toller Tipp, der über das Setzen eines leeren Bereichs auf dem Interface Builder ... :-D
Felipe Ferri
9
Interface Builder und Swift programmatische Routen funktionierten für mich in XCode 8.3.2, Swift 3
Agrippa
Sie können meine sehr einfache Lösung zum Ausblenden aller Zurück-Schaltflächen in der App ausprobieren. PS: Benötigt eigene
Codezeile Null
2
Wenn Back ButtonIB bereits leer ist, fügen Sie einfach ein Leerzeichen hinzu Backund zeigen Sie den Pfeil.
Tejas K
3
Diese Methode funktioniert derzeit nur im Interface Builder. Das Festlegen dieses Codes aus Code funktioniert nicht. Statt nur den Titel festzulegen, müssen Sie das gesamte backBarButtonItem wie folgt festlegen: navigationItem.backBarButtonItem = UIBarButtonItem (title: "", style: .plain, target: nil, action: nil)
Leszek Szary
81

Sie können dies auch über das Storyboard tun. Im Attributinspektor des Navigationselements des vorherigen Controllers können Sie im Feld Zurück die Schaltfläche "" festlegen. Siehe Bild unten. Ersetzen Sie "Ihr Titel hier" durch "". Auf diese Weise erzielen Sie das gewünschte Ergebnis. Sie müssen sich nicht mehr mit dem Titel herumschlagen.

Programmatisch könnten Sie verwenden

[self.navigationItem.backBarButtonItem setTitle:@" "];

Dabei bezieht sich self auf den Controller, der den gewünschten View-Controller drückt.

Navigationselement des Xcode View Controllers

Beispiel vor, nach der Navigationsleiste

Vor Vor

Nach dem Nach dem

Shahzin KS
quelle
7
Dies funktioniert perfekt, wenn es in Storyboards eingestellt ist. Stellen Sie einfach sicher, dass die Navigationsleiste ein Navigationselement enthält, damit es eingestellt werden kann.
11
In iOS 9 / Xcode 7.3 backBarButtonItemfunktioniert das programmgesteuerte Festlegen nicht, das Festlegen über das Storyboard jedoch.
Scott Gardner
@ ScottGardner, backBarButtonItemprogrammgesteuerte Einstellung funktioniert für mich in iOS 9.
Suragch
Wenn Sie keine Navigationsleiste auf Ihrem Bildschirm haben, möglicherweise weil sie ausgeblendet werden muss, können Sie dem vorherigen Ansichts-Controller ein Navigationselement im Storyboard hinzufügen und die Zurück-Schaltfläche auf "" setzen.
Martin Berger
Die Lösung funktionierte hervorragend und war sehr einfach in Xcode 9.2 / iOS 11 zu implementieren.
Ray Hunter
77

Sie können Folgendes implementieren UINavigationControllerDelegate:

Älterer Swift

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

backBarButtonItemist nilstandardmäßig aktiviert und wirkt sich auf den nächsten Push-Controller aus. Sie müssen ihn also nur für alle Controller festlegen

VoidLess
quelle
6
Danke dir! Dies ist die einzige Lösung, die funktioniert hat (ohne etwas anderes durcheinander zu bringen), nachdem 4 doppelte Fragen und Dutzende von Antworten betrachtet wurden.
Inket
1
Ich hatte bereits eine Navigationscontroller-Unterklasse, die ich zu einem eigenen Delegierten gemacht habe. Dies funktionierte perfekt. Sollte allerdings für Swift 3 aktualisiert werden.
Dean Kelly
Tolle Lösung, danke, die einzige, die konsequent für mich funktioniert hat.
Elliott Davies
Woks wie ein Zauber.
Tunaobun
46

Das Setzen des Titels der Zurück-Taste auf @""oder nilfunktioniert nicht. Sie müssen die gesamte Schaltfläche leer lassen (ohne Titel oder Bild):

Ziel c

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

Schnell

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

Dies sollte auf dem Ansichts-Controller erfolgen, der sich im Navigationsstapel über Ihrem Ansichts-Controller befindet (dh von wo aus Sie über die pushViewControllerMethode zu Ihrem VC navigieren ).

Schakal
quelle
2
Danke, es funktioniert! In Kürze: self.navigationItem.backBarButtonItem = UIBarButtonItem (Titel: "", Stil: .Plain, Ziel: Null, Aktion: Null)
mostworld77
30

Eine andere Lösung für dieses Problem in Situationen, in denen Sie viele View-Controller haben, besteht darin, einen UIAppearanceProxy zu verwenden, um den Titeltext der Zurück-Schaltfläche wie folgt effektiv auszublenden:

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

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

Bei dieser Lösung wird der Text als winziger klarer Punkt gerendert, ähnlich wie beim manuellen Festlegen des Titels der Zurück-Schaltfläche @" ", mit der Ausnahme, dass alle Schaltflächen der Navigationsleiste betroffen sind.

Ich empfehle dies nicht als allgemeine Lösung für das Problem, da es alle Schaltflächen der Navigationsleiste betrifft. Das Paradigma wird umgedreht, sodass Sie auswählen können, wann die Schaltflächentitel angezeigt werden sollen, anstatt wann die Titel ausgeblendet werden sollen.

Um zu entscheiden, wann die Titel angezeigt werden sollen, stellen Sie entweder die Titeltextattribute nach Bedarf manuell wieder her oder erstellen Sie eine spezielle Unterklasse UIBarButtonItem, die dasselbe tut (möglicherweise mit einem anderen UIAppearanceProxy).

Wenn Sie eine App haben, in der die meisten Titel der Zurück-Schaltfläche ausgeblendet werden müssen und nur wenige (oder keine) der Navi-Schaltflächen Systemschaltflächen mit Titeln sind, ist dies möglicherweise das Richtige für Sie!

(Hinweis: Die Änderung der Schriftgröße ist erforderlich, obwohl die Textfarbe klar ist, um sicherzustellen, dass bei langen Titeln der Titel der mittleren Navigationsleiste nicht verschoben wird.)

Adam Kaplan
quelle
War die einfachste Lösung für meine Implementierung. Vielen Dank.
Trevor Panhorst
3
Verdeckt dies nicht auch Elemente einer linken Leiste, die keine Zurück-Schaltflächen sind?
Kevinl
1
Ja, das habe ich auch bemerkt. "Es betrifft alle Tasten der Navigationsleiste"
Adam Kaplan
2
Sollte es nicht alle anderen Schaltflächen in Navigationsleisten betreffen, einschließlich der Schaltflächenelemente der linken / rechten Leiste?
Fjodor Volchyok
Ja, er hat keine umfassendere Anforderung angegeben.
Adam Kaplan
30

Fügen Sie den folgenden Code in viewDidLoad oder loadView hinzu

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

Ich habe es in iPhone und iPad mit iOS 9 getestet

allein
quelle
20
Dies hat den Titel des vorherigen View Controllers nicht gelöscht?
CalZone
6
Nicht verwenden, da dadurch der letzte Bildschirmtitel entfernt wird
evya
Wenn Sie dies vom aktuellen Ansichts-Controller aus tun müssen, sollten Sie lieber Folgendes tun: navigationController? .NavigationBar.topItem? .BailBarButtonItem = UIBarButtonItem (title: "", style: .plain, target: nil, Aktion: Null)
Leszek Szary
15

Sie können diese Objective-C-Kategorie hinzufügen, damit alle von einem Navigationscontroller erstellten "Zurück" -Schaltflächen keinen Text enthalten. Ich habe es gerade zu meiner AppDelegate.m-Datei hinzugefügt.

@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 - (Ich weiß nicht, wie diese Erweiterung mit Swift funktioniert, sie hatte seltsame Fehler. Änderungen sind willkommen, um eine Swift-Version hinzuzufügen.)

Teradyl
quelle
Dies geben den Titel "Zurück" nicht den Titel verstecken
Raj Aggrawal
Wirklich, wie overridees schnell geht. Sehr interessante Frage
Andrey Gagan
@teradyl es ist die beste Antwort.
aks.knit1108
@ Andy Gagan, siehe meine Antwort
Abirami Bala
Dies funktioniert unter iOS 9.0 - 10.3.3, aber unter iOS 11+ nicht.
Sihad Begovic
13

Ich habe einige oben und unten ausprobiert, aber sie haben nicht funktioniert. Das hat bei mir funktioniert:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationController?.navigationBar.topItem?.title = ""
}
Catanore
quelle
1
Wenn Sie dies vom aktuellen Ansichtscontroller aus tun müssen, sollten Sie lieber Folgendes tun: navigationController? .NavigationBar.topItem? .BailBarButtonItem = UIBarButtonItem (title: "", style: .plain, target: nil, Aktion: Null)
Leszek Szary
11

Das einzige, was ohne Nebenwirkungen funktioniert, ist das Erstellen einer benutzerdefinierten Zurück-Schaltfläche. Solange Sie keine benutzerdefinierte Aktion angeben, funktioniert auch die Foliengeste.

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

Wenn Sie möchten, dass alle Zurück-Schaltflächen keine Titel enthalten, müssen Sie diese benutzerdefinierte Zurück-Schaltfläche in allen View-Controllern einrichten: /

override func viewDidLoad() {
    super.viewDidLoad()

    setupBackButton()
}

Es ist sehr wichtig, dass Sie ein Leerzeichen als Titel und nicht als leere Zeichenfolge festlegen.

Cezar Signori
quelle
9

Um den Text programmgesteuert vom Backbutton zu entfernen, der unter Code verwendet wird, funktioniert dies ab xcode7.

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

oder

manuell Wählen Sie in Storyboards die Navigationsleiste auf dem Ansichts-Controller aus und fügen Sie "" in den Text der Zurück-Schaltfläche ein.

das wird funktionieren. Vielen Dank

Jyothi Babu Pakalz
quelle
2
Dieser wird auch den Titel des Navigationselements entfernen
Ilker Baltaci
Ich habe Ihre Antwort darauf bearbeitet: self.navigationController?.navigationBar.topItem?.title = " "in Xcode 9 und gearbeitet!
MHSFisher
Wenn Sie dies vom aktuellen Ansichtscontroller aus tun müssen, sollten Sie lieber Folgendes tun: navigationController? .NavigationBar.topItem? .BailBarButtonItem = UIBarButtonItem (title: "", style: .plain, target: nil, Aktion: Null)
Leszek Szary
8

Die aktuelle Antwort funktionierte nicht. Ich wollte den Titel komplett entfernen , aber der Text "zurück" verschwand nicht.

Kehren Sie zum vorherigen Ansichts-Controller zurück und legen Sie dessen title-Eigenschaft fest:

self.title = @" ";

Funktioniert NUR, wenn der vorherige View Controller keinen Titel hat

ChrisHaze
quelle
@ZevEisenberg stellt sicher, dass die Eigenschaft festgelegt wird, bevor sie im Lebenszyklus des View Controllers angezeigt wird. Legen Sie dies entweder in den Methoden viewDidLoad oder viewWillAppear fest.
ChrisHaze
1
Stellen Sie außerdem sicher, dass zwischen den Anführungszeichen ein Leerzeichen steht .
ChrisHaze
1
Es hat tatsächlich für mich ohne Leerzeichen funktioniert ; nur gute alte leere Zeichenfolge : @"".
Zev Eisenberg
1
@ZevEisenberg, Als ich die Lösung zum ersten Mal entwickelte, war sie früher in Xcode 5. Nur mit einem Leerzeichen funktionierte sie, weshalb ich sie in den Beispielcode aufgenommen habe. Das Xcode 6-Update muss es enthalten haben. Gut zu wissen - danke
ChrisHaze
Ich habe auch meinen Ansatz verwendet, der immer noch funktioniert, und tatsächlich auch den Standard-Rückpfeil entfernt.
ChrisHaze
5

Alternative Möglichkeit: Verwenden Sie eine benutzerdefinierte NavigationBar-Klasse.

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

}

Das heißt, dies entfernt das gesamte Projekt zurück. Legen Sie einfach eine benutzerdefinierte Klasse für UINavigationController fest.

LLIAJLbHOu
quelle
4

Setzen Sie den Titel der vorherigen VC auf "" Zeichenfolge mit Leerzeichen. und Titel mit der Zurück-Schaltfläche werden durch eine einzelne Leerzeichenfolge ersetzt.

Self.title = " "

Bei Zurück drücken Sie erneut, um den Titel in viewWillAppear auf den ursprünglichen zurückzusetzen.

Mohit Kumar
quelle
4

Verwenden Sie einen benutzerdefinierten Benutzer NavigationController, der überschreibtpushViewController

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
quelle
4

Viele Antworten schon, hier sind meine zwei Cent zu diesem Thema. Ich fand diesen Ansatz sehr robust. Sie müssen dies nur in viewController einfügen, bevor Sie fortfahren.

Swift 4:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}
Codetard
quelle
2
Ja! Vielen Dank :)
Hews
3

Ich habe alles in diesem Beitrag versucht. Die einzige funktionierende Lösung ist @ VoidLess's

Hier ist die gleiche Antwort, aber vollständiger

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
quelle
3

Dies ist meine Auflösung für iOS11. Ich ändere das Erscheinungsbild von UIBarButtonItem in applicationDidFinishLaunchingWithOptions:

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

Sie können den Y-Versatz nicht ändern, da dadurch auch die Position der Schaltfläche für die hintere Leiste in iOS11 geändert wird. In iOS10 und darunter ist dies jedoch in Ordnung.

VictorChee
quelle
1
Es funktioniert, aber während der Animation können Sie sehen, wie sich der vorherige Titel links bewegt. Es sieht ein bisschen fehlerhaft aus.
Jonathan
2

Swift 3.1 Sie können dies tun, indem Sie die Delegate-Methode von UINavigationController implementieren.

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
quelle
Die beste Antwort!
Evya
2

Für diejenigen, die den Titel der Zurück-Schaltfläche global ausblenden möchten.

Sie können swizzle viewDidLoadvon UIViewControllerso.

+ (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);
    }

}

Verwendung:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [[self class] overrideBackButtonTitle];
    return YES;
}
nRewik
quelle
1

In Swift3

Wenn Sie die globale Einstellung festlegen

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
quelle
1
Beachten Sie, dass dadurch auch die Farbe für alle anderen Leistenschaltflächen, die Sie möglicherweise irgendwo in Ihrer App haben, in transparent geändert wird, nicht nur für die Zurück-Schaltflächen.
Leszek Szary
1

Ich hatte damit zu kämpfen, weil ich einen benutzerdefinierten Navigationscontroller hatte. Mit diesem Code konnte ich den Text des hinteren Elements in allen Ansichts-Controllern in meiner benutzerdefinierten Navigations-Controller-Klasse entfernen override func viewDidLayoutSubviews() { self.navigationBar.backItem?.title = "" }

Dadurch werden alle Titel der hinteren Elemente mithilfe dieses benutzerdefinierten Navigationscontrollers entfernt.

Amy.R
quelle
1
Update dafür: Dies funktioniert, aber es gibt eine merkwürdige Verzögerung beim Laden, die mich stört. Ich habe jetzt Folgendes hinzugefügt: 'let BarButtonItemAppearance = UIBarButtonItem.appearance () BarButtonItemAppearance.setTitleTextAttributes ([NSAttributedStringKey.foregroundColor: UIColor.clear], für: .normal)' im App-Delegaten funktioniert und funktioniert!
Amy.R
1

Wenn Sie auf iOS 13 und höher abzielen , können Sie diese neue API verwenden , um den Titel der Zurück-Schaltfläche global auszublenden .

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
quelle
1
Das ist nicht optimal. Wenn ein Benutzer mit dem Klartext auf das Etikett tippt, wird die Zurückaktion weiterhin ausgelöst.
dvdblk
0

In iOS 11 haben wir festgestellt, dass das Festlegen UIBarButtonItemder Textschrift / -farbe des Erscheinungsbilds auf einen sehr kleinen Wert oder eine klare Farbe dazu führt, dass andere Balkenelemente verschwinden (das System berücksichtigt die Klasse der UIBarButton-Elemente nicht mehr, sondern konvertiert sie in a _UIModernBarButton). Wenn Sie auch den Versatz des Rücktextes auf Offscreen setzen, blinkt dies während des interaktiven Pop.

Also haben wir geschwatzt 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
quelle
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
quelle
0

Der hintere Text stammt vom View des letzten View Controllers navigationItem.titleund navigationItem.titlewird automatisch von festgelegt self.title. So einfach, um das Problem zu lösen, ist Haken hook setTitle:stellen Sie sichernavigationItem.title = @""

Geben Sie diesen Code ein AppDelegate.m, damit es in Ordnung ist。

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

Weitere Informationen unter https://www.jianshu.com/p/071bc50f1475(Simple Chinease)

Fengxing
quelle
0

Meine Lösung: - XCode: 10.2.1 - Swift: 5

  • Übergeordneter Ansichtscontroller:
    • self.title = ""
  • Untergeordneter Viewcontroller:
    • self.navigationItem.title = "Ihr Titel" // um den Titel für den Viewcontroller festzulegen
PhuocLuong
quelle
0

XCode 11.5 Swift 5

Eine sehr einfache - wenn auch etwas hackige - Möglichkeit, dies programmgesteuert zu tun, wenn Sie die benutzerdefinierte Zurück-Schaltfläche nicht benötigen, besteht darin, die Schriftgröße in dem View-Controller, den Sie auf den Stapel schieben, auf Null zu setzen und so etwas aufzurufen von 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
quelle
-1

Endlich die perfekte Lösung gefunden, um Standard-Backtext in der gesamten App auszublenden.

Fügen Sie einfach ein transparentes Bild hinzu und fügen Sie den folgenden Code in Ihr AppDelegate ein.

UIBarButtonItem.appearance().setBackButtonBackgroundImage(#imageLiteral(resourceName: "transparent"), for: .normal, barMetrics: .default)
Lalit Kumar
quelle
-2

Die folgende Methode funktioniert unter iOS 11 und kann unter anderen iOS-Versionen nicht zum Absturz gebracht werden. Wenn Sie dies tun, wird Ihre App möglicherweise in der App Store-Überprüfung abgelehnt, da sowohl UIModernBarButton als auch UIBackButtonContainerView private APIs sind. In AppDelegate platzieren.

    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
quelle
Wenn Sie dies tun, wird Ihre App möglicherweise in der App Store-Überprüfung abgelehnt, da sowohl UIModernBarButton als auch UIBackButtonContainerView private APIs sind.
Groot
Danke @Groot, habe deine Warnung hinzugefügt.
Patrick
-5

Schnelle Version, funktioniert weltweit perfekt:

 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
quelle
7
Sie sollten hinzufügen, dass dadurch der gesamte Text ausgeblendet wird, auch rightBarButtons und leftBarButtons, die nicht zurückgehen.
Limfinity
das ist kein solution. Wie @limfinity zeigte, wird es universell für alle UIBarButtonItems in der gesamten App
geändert
Ich stimme @limfinity und Danut Pralea zu, es wird den gesamten Text des UIBarButtonItem in der gesamten App
verbergen