Einfache Frage, wie kann ich den Text des Registerkartenleistenelements entfernen und nur das Bild anzeigen?
Ich möchte, dass die Balkenelemente in der Instagram-App gefallen:
Im Inspektor in xcode 6 entferne ich den Titel und wähle ein @ 2x (50px) und ein @ 3x (75px) Bild. Das Bild verwendet jedoch nicht den freien Speicherplatz des entfernten Textes. Irgendwelche Ideen, wie Sie das gleiche Bild in der Registerkartenleiste wie in der Instagram-App erzielen können?
ios
swift
uitabbaritem
Upvote
quelle
quelle
""
für den Titel, vielleicht?Antworten:
Sie sollten mit
imageInsets
Eigentum von spielenUITabBarItem
. Hier ist Beispielcode:Die Werte im Inneren
UIEdgeInsets
hängen von Ihrer Bildgröße ab. Hier ist das Ergebnis dieses Codes in meiner App:quelle
quelle
So geht's in einem Storyboard.
Löschen Sie den Titeltext und stellen Sie das Bild wie im folgenden Screenshot ein
Denken Sie daran, dass die Symbolgröße der Apple-Designrichtlinie entsprechen sollte
Dies bedeutet, dass Sie 25px x 25px für @ 1x, 50px x 50px für @ 2x, 75px x 75px für @ 3x haben sollten
quelle
Mit Ansatz mit jeder Einstellung
UITabBarItem
s -title
Eigenschaft auf""
und AktualisierungimageInsets
funktioniert nicht richtig, wenn im View - Controllerself.title
eingestellt ist. Zum Beispiel, wennself.viewControllers
UITabBarController eingebettet sindUINavigationController
und der Titel in der Navigationsleiste angezeigt werden soll. In diesem Fall setzen Sie denUINavigationItem
Titel direkt mitself.navigationItem.title
, nichtself.title
.quelle
Schnelle Version von ddiego Antwort
Kompatibel mit iOS 11
Rufen Sie diese Funktion in viewDidLoad jedes ersten untergeordneten Elements der viewController auf, nachdem Sie den Titel des viewControllers festgelegt haben
Beste Übung:
Alternativ auch als @daspianist in Kommentaren vorgeschlagen
quelle
class BaseTabBarController: UITabBarController, UITabBarControllerDelegate
viewDidLoad
Wenn Sie Storyboards verwenden, ist dies die beste Option. Es durchläuft alle Elemente der Registerkartenleiste und setzt für jedes Element den Titel auf Null und macht das Bild im Vollbildmodus. (Sie müssen ein Bild im Storyboard hinzugefügt haben)
quelle
iOS 11 wirft bei vielen dieser Lösungen einen Knick auf, daher habe ich meine Probleme unter iOS 11 behoben, indem ich UITabBar unterklassifiziert und layoutSubviews überschrieben habe.
quelle
Ich habe den folgenden Code in viewDidLoad meines BaseTabBarController verwendet. Beachten Sie, dass ich in meinem Beispiel 5 Registerkarten habe und das ausgewählte Bild immer base_image + "_selected" lautet.
quelle
for var i = 0; i < tabBar...
, hätten Sie einfach sagen können;for tabBarItems in tabBar.items!
Swift 4 Ansatz
Ich konnte den Trick ausführen, indem ich eine Funktion implementierte, die ein TabBarItem verwendet und es formatiert.
Verschiebt das Bild ein wenig nach unten, um es zentrierter zu machen, und verbirgt auch den Text der Registerkartenleiste. Es hat besser funktioniert, als nur den Titel auf eine leere Zeichenfolge zu setzen, denn wenn Sie auch eine Navigationsleiste haben, erhält die TabBar bei Auswahl den Titel des viewControllers zurück
Neueste Syntax
Und verwenden Sie es einfach in Ihrer TabBar als:
quelle
Hier ist eine bessere, kinderleichtere Möglichkeit, dies zu tun, als die Top-Antwort:
Fügen Sie dies
AppDelegate.didFinishLaunchingWithOptions
so ein, dass es alle Schaltflächen der Registerkartenleiste während der gesamten Lebensdauer Ihrer App betrifft.quelle
Eine minimale, sichere UITabBarController-Erweiterung in Swift (basierend auf der Antwort von @ korgx9):
quelle
Basierend auf der Antwort von ddiego in Swift 4.2 :
Und Sie müssen nur
self.tabBarController?.cleanTitles()
Ihren View Controller aufrufen .quelle
Basierend auf all den tollen Antworten auf dieser Seite habe ich eine weitere Lösung entwickelt, mit der Sie den Titel auch wieder anzeigen können. Anstatt den Inhalt des Titels zu entfernen, ändere ich einfach die Schriftfarbe in transparent.
quelle
Code:
quelle
Einfachster Weg und funktioniert immer:
quelle
In meinem Fall wurde derselbe ViewController in TabBar und anderen Navigationsabläufen verwendet. In meinem ViewController habe ich festgelegt,
self.title = "Some Title"
was in der Registerkartenleiste angezeigt wird, unabhängig davon, ob Titelnil
oder Leerzeichen beim Hinzufügen in der Registerkartenleiste festgelegt wurden. Ich habe auchimageInsets
wie folgt eingestellt:item.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
In meinem ViewController habe ich den Navigationstitel wie folgt behandelt:
quelle
Erstellen Sie eine Unterklasse von UITabBarController und weisen Sie diese Ihrer tabBar zu. Fügen Sie dann in der viewDidLoad-Methode diese Codezeile ein:
quelle
Benutzerdefinierte TabBar - iOS 13, Swift 5, XCode 11
Storyboard basiert. Dies kann auch leicht programmgesteuert erreicht werden. Nur noch 4 Schritte:
Registerkartensymbole müssen in 3 Größen in schwarzer Farbe vorliegen. Normalerweise lade ich von fa2png.io herunter - Größen: 25x25, 50x50, 75x75. PDF-Bilddateien funktionieren nicht!
Legen Sie im Storyboard für das Element der Registerkartenleiste das Symbol fest, das Sie über den Attributinspektor verwenden möchten. (siehe Screenshot)
UITabBarController-Klasse
Klasse RoundedTabBarViewController: UITabBarController {
}}
Ergebnis
quelle
Wenn Sie die Registerkarten zentrieren / die Bildeinfügungen ändern möchten, ohne magische Zahlen zu verwenden, hat Folgendes für mich funktioniert (in Swift 5.2.2):
In einer UITabBarController- Unterklasse können Sie die Bildeinsätze hinzufügen, nachdem Sie die Ansichts-Controller festgelegt haben.
In mehreren der oben genannten Optionen sind Lösungen zum Ausblenden des Texts aufgeführt.
quelle