webentwicklung-frage-antwort-db.com.de

Die Schaltfläche "UINavigationController" blendet den Titel unter iOS 11 nicht aus

Ich habe mein Gerät gestern auf iOS 11 Beta und meine App mit diesem Code in AppDelegate aktualisiert, um den Schaltflächen-Titel auf allen Bildschirmen zu verbergen:

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

Normalerweise funktioniert die ältere Version, aber wenn ich meine App auf iOS 11 Beta starte, wird der Titel der Zurück-Schaltfläche immer noch angezeigt. Steht jemand vor diesem Problem? Ist es ein Beta-Versionsfehler von iOS oder iOS 11, der eine andere Möglichkeit zum Ausblenden des hinteren Schaltflächentitels benötigt?

11
Son Hoang

Ich habe Ihren Ansatz schon früher verwendet, aber leider funktioniert er nicht mehr. Nachdem ich alle möglichen Lösungen ausprobiert hatte, funktionierte nur ich ohne Probleme und Fehler. Bitte beachten Sie, dass es anscheinend keinen universellen Weg gibt, um dies global für alle UIViewController zu beheben.

  1. Anruf

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

auf viewWillDisappear des präsentierenden Controllers.

  1. Anruf

    self.title = @"Title"
    

auf viewWillAppear des präsentierenden Controllers.

Andere Lösungen, die ich ausprobiert habe, haben verschiedene Probleme, z. Sie funktionieren gut, aber alles bricht, wenn Sie vom linken Rand ein wenig streichen.

6
CrazyJoeLv

Was ich in iOS 11 getan habe, war einfach das UINavigationControllerDelegate-Protokoll für meine Root-Navigationscontroller zu implementieren und das "leere" UIBarButtonItem als Zurück-Schaltfläche jedes Mal festzulegen, wenn ein neuer Controller angezeigt wird. Hier ist die Swift 4 Version:

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

FÜR Swift 3+

Verwenden Sie den folgenden Code, um iOS 9 bis 11 zu unterstützen 

     if #available(iOS 11, *) {
            UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .normal)
            UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .highlighted)
     } else {
            UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0,
-60), for:UIBarMetrics.default)
        }
0
MANISH PATHAK

Wenn Sie die Farbe des Balkentastentexts auf "Löschen" setzen, ist dies die sauberste Methode, die ich für alle Bildschirme gefunden habe

 UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .normal)
 UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .highlighted)
0
AFraser