web-dev-qa-db-fra.com

Déplacement de l'image UITabBarItem vers le bas?

Normalement, sur chaque onglet d'une UITabBar, vous avez une petite image et un titre nommant l'onglet. L'image est positionnée/centrée vers le haut de l'onglet pour accueillir le titre en dessous. Ma question est la suivante: si vous voulez avoir une barre de tabulation avec juste une image et aucun titre, n’est-il pas possible de déplacer l’image vers le bas pour qu’elle soit mieux centrée dans l’onglet?

J'utilise (voir ci-dessous) actuellement:

[tabBarItem setFinishedSelectedImage:tabSelected withFinishedUnselectedImage:tabUnselected];

mais je préférerais utiliser une image plus grande sans titre. Pour le moment, si je fais une image plus grande qu’environ 70 pixels @ 2x, elle commence à dépasser légèrement de la UITabBar tout en laissant beaucoup d’espace inutilisé en bas.

86
fuzzygoat

Essayez d’ajuster le nom tabBarItem (imageInsets) (pour déplacer l’image d’icône) et de définir le titre du contrôleur sur nil (aucun titre ne s’affiche donc). Mettez quelque chose comme ceci à la méthode -init ou -viewDidLoad dans le contrôleur de vue:

Objectif c

self.tabBarItem.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0);
self.title = nil;

Rapide

self.tabBarItem.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
self.title = nil

UITabBarItem est une sous-classe de UIBarItem qui a la propriété UIEdgeInsets imageInsets. Jouez un peu avec les incrustations jusqu'à ce que tout soit beau (en fonction des images d'icône de la barre de tabulation)

159
Lukas Kukacka

Vous pouvez aussi le faire via le storyboard. Sélectionnez votre tabbaritem, accédez à l'inspecteur de taille et affectez les encarts appropriés.

 enter image description here

* Démonstration sur Xcode, version 7.3.1 (7D1014)

127
Neil Galiaskarov

Créez une sous-classe de UITabBarController et dans sa viewDidLoad:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.viewControllers enumerateObjectsUsingBlock:^(UIViewController *vc, NSUInteger idx, BOOL *stop) {
        vc.tabBarItem.title = nil;
        vc.tabBarItem.imageInsets = UIEdgeInsetsMake(5, 0, -5, 0);
    }];
}

Swift 3:

for vc in self.viewControllers! {
    vc.tabBarItem.title = nil
    vc.tabBarItem.imageInsets = UIEdgeInsetsMake(5, 0, -5, 0)
}
46
Brian

Si vous utilisez Xamarin, cela fonctionne:

screen.TabBarItem.ImageInsets = new UIEdgeInsets(5, 0, -5, 0);
screen.TabBarItem.Title = "";
9
Jelle

Cela a fonctionné pour moi

Swift 4

let array = tabBarController?.customizableViewControllers
for controller in array! {
    controller.tabBarItem.imageInsets = UIEdgeInsetsMake(5, 0, -5, 0)
}
8
Alfi

Pour iOS 11, vous devez remplacer TraitCollection method en dehors du paramétrage de ImageInsets. S'il vous plaît ajouter la méthode dans votre classe UITabBarController sous-classe

public override UITraitCollection TraitCollection {
 get {
  return UITraitCollection.FromHorizontalSizeClass(horizontalSizeClass: UIUserInterfaceSizeClass.Compact);
 }
}
2
Prashant

Swift 3.0

Vous pouvez définir des incrustations d'image, définir en haut, à gauche, en bas et à droite selon le design.

self.tabBarItem.imageInsets = UIEdgeInsets(top: 5, left: 0, bottom: 0, right: 0)
1
krish

Dans Swift 4.2 , UIEdgeInsetsMake est supprimé, nous devrions plutôt utiliser UIEdgeInsets,

let array = tabBarController?.customizableViewControllers
    for controller in array! {
        controller.tabBarItem.imageInsets = UIEdgeInsets(top: 5, left: 0, bottom: -5, right: 0)
    }
0
Bappaditya