Question simple, comment puis-je supprimer le texte de l'élément de la barre d'onglets et n'afficher que l'image?
Je veux que les articles du bar aiment dans l'application Instagram:
Dans l'inspecteur de xcode 6, je supprime le titre et choisis une image @ 2x (50px) et une @ 3x (75px). Cependant, l'image n'utilise pas l'espace libre du texte supprimé. Des idées pour obtenir la même image d'élément de barre d'onglets que dans l'application Instagram?
ios
swift
uitabbaritem
Vote favorable
la source
la source
""
pour le titre, peut-être?Réponses:
Vous devriez jouer avec la
imageInsets
propriété deUITabBarItem
. Voici un exemple de code:Les valeurs à l'intérieur
UIEdgeInsets
dépendent de la taille de votre image. Voici le résultat de ce code dans mon application:la source
la source
Voici comment procéder dans un storyboard.
Effacez le texte du titre et définissez l'encart d'image comme la capture d'écran ci-dessous
N'oubliez pas que la taille de l'icône doit suivre directives de conception de pomme
Cela signifie que vous devriez avoir 25px x 25px pour @ 1x, 50px x 50px pour @ 2x, 75px x 75px pour @ 3x
la source
L'utilisation de l'approche avec la définition de la propriété de chaque
UITabBarItem
stitle
sur""
et la mise à jourimageInsets
ne fonctionnera pas correctement si le contrôleur de vueself.title
est défini. Par exemple, siself.viewControllers
UITabBarController est incorporéUINavigationController
et que vous avez besoin que le titre soit affiché dans la barre de navigation. Dans ce cas, définissezUINavigationItem
directement le titre en utilisantself.navigationItem.title
, pasself.title
.la source
Version rapide de la réponse ddiego
Compatible avec iOS 11
Appelez cette fonction dans viewDidLoad de chaque premier enfant de viewControllers après avoir défini le titre de viewController
Meilleur entrainement:
Alternativement comme @daspianist suggéré dans les commentaires
la source
class BaseTabBarController: UITabBarController, UITabBarControllerDelegate
et mettre cette fonction dans la sous-classeviewDidLoad
Si vous utilisez des storyboards, ce serait votre meilleure option. Il parcourt tous les éléments de la barre d'onglets et pour chacun d'eux, il définit le titre sur rien et rend l'image en plein écran. (Vous devez avoir ajouté une image dans le storyboard)
la source
iOS 11 jette un problème dans bon nombre de ces solutions, je viens donc de résoudre mes problèmes sur iOS 11 en sous-classant UITabBar et en remplaçant layoutSubviews.
la source
J'ai utilisé le code suivant dans le viewDidLoad de mon BaseTabBarController. Notez que dans mon exemple, j'ai 5 onglets, et l'image sélectionnée sera toujours base_image + "_selected".
la source
for var i = 0; i < tabBar...
, vous auriez pu simplement dire;for tabBarItems in tabBar.items!
Approche Swift 4
J'ai pu faire l'astuce en implémentant une fonction qui prend un TabBarItem et le met en forme.
Déplace l'image un peu vers le bas pour la rendre plus centrée et masque également le texte de la barre d'onglets. Fonctionne mieux que de simplement définir son titre sur une chaîne vide, car lorsque vous avez également une barre de navigation, la barre de tabulation récupère le titre de la vueContrôleur lorsqu'il est sélectionné
Dernière syntaxe
Et utilisez-le simplement dans votre tabBar comme:
la source
Voici une meilleure façon, plus infaillible de faire cela, autre que la réponse principale:
Mettez-le dans votre
AppDelegate.didFinishLaunchingWithOptions
afin qu'il affecte tous les boutons de la barre d'onglets tout au long de la vie de votre application.la source
Une extension UITabBarController minimale et sûre dans Swift (basée sur la réponse @ korgx9):
la source
Basé sur la réponse de ddiego , dans Swift 4.2 :
Et il vous suffit d'appeler
self.tabBarController?.cleanTitles()
votre contrôleur de vue.la source
Sur la base de toutes les bonnes réponses de cette page, j'ai conçu une autre solution qui vous permet également d'afficher à nouveau le titre. Au lieu de supprimer le contenu du titre, je change simplement la couleur de la police en transparent.
la source
code:
la source
Le moyen le plus simple et fonctionne toujours:
la source
Dans mon cas, le même ViewController a été utilisé dans TabBar et d'autres flux de navigation. Dans mon ViewController, j'ai défini
self.title = "Some Title"
ce qui apparaissait dans TabBar quel que soit le titre du paramètrenil
ou le vide lors de l'ajout dans la barre d'onglets. J'ai également définiimageInsets
comme suit:item.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
Donc, dans mon ViewController, j'ai géré le titre de navigation comme suit:
la source
créez une sous-classe de UITabBarController et affectez-la à votre tabBar, puis dans la méthode viewDidLoad, placez cette ligne de code:
la source
TabBar personnalisé - iOS 13, Swift 5, XCode 11
Basé sur le storyboard. Il peut également être réalisé facilement par programme. Seulement 4 étapes à suivre:
Les icônes de la barre d'onglets doivent être de 3 tailles, de couleur noire. Habituellement, je télécharge depuis fa2png.io - tailles: 25x25, 50x50, 75x75. Les fichiers image PDF ne fonctionnent pas!
Dans Storyboard pour l'élément de la barre d'onglets, définissez l'icône que vous souhaitez utiliser via l'inspecteur d'attributs. (voir capture d'écran)
Classe UITabBarController
classe RoundedTabBarViewController: UITabBarController {
}
Résultat
la source
Si vous cherchez à centrer les onglets / modifier les encarts d'image sans utiliser de nombres magiques, ce qui suit a fonctionné pour moi (dans Swift 5.2.2):
Dans une sous-classe UITabBarController , vous pouvez ajouter des incrustations d'image après avoir défini les contrôleurs de vue.
Plusieurs des options ci-dessus répertorient les solutions permettant de masquer le texte.
la source