111 votes

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

Normalement, sur chaque onglet d'un UITabBar vous avez une petite image et un titre qui nomme l'onglet. L'image est positionnée/centrée vers le haut de l'onglet pour s'adapter au titre situé en dessous. Ma question est la suivante : si vous voulez avoir une barre d'onglets avec juste une image et pas de titre, y a-t-il un moyen de déplacer l'image vers le bas pour qu'elle soit mieux centrée dans l'onglet ?

J'utilise actuellement (voir ci-dessous) :

[tabBarItem setFinishedSelectedImage:tabSelected withFinishedUnselectedImage:tabUnselected];

mais je préférerais utiliser une image plus grande sans titre. Pour l'instant, si j'agrandis l'image au-delà de 70 pixels@2x, elle commence à se détacher du haut de l'écran. UITabBar tout en laissant beaucoup d'espace inutilisé en bas.

2voto

krish Points 474

SWIFT 3.0

Vous pouvez définir des jeux d'images, définir le haut, la gauche, le bas et la droite selon le design.

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

2voto

Prashant Points 224

Pour iOS 11, vous devez remplacer TraitCollection en dehors de la définition de ImageInsets. Veuillez ajouter la méthode dans votre classe sous-classée UITabBarController

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

2voto

Bappaditya Points 5222

En Swift 4.2 , UIEdgeInsetsMake est déprécié, 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)
    }

1voto

Michael Points 389

Cela n'a pas fonctionné pour moi, la seule solution qui a fonctionné a été de définir le paramètre alignmentRectInsets lors de l'ajout de l'image. Voici à quoi ressemblait le mien :

let newsView = NewsViewController()
let newsIcon = UITabBarItem(title: nil, image: UIImage(systemName: "newspaper")?.withAlignmentRectInsets(UIEdgeInsets(top: 8.5, left: 0, bottom: -8.5, right: 0)), tag: 0)
newsView.tabBarItem = newsIcon
let viewControllers = [newsNavController]
self.viewControllers = viewControllers

1voto

ChuckZHB Points 646

En 2021, Objective-C

J'essaie toutes les approches, aucune ne fonctionne. J'ai fini par trouver que c'est à cause de l'utilisation du symbole SF comme image de tabbaritem. Si je le remplace par une image personnalisée, tout fonctionne.

    NSArray *tabItems = [self.tabBar items];
    // set tabItem icon, remove blue image with render mode set.
    UIImage *image1 = [[UIImage imageNamed:@"myIcon"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

    // set title offset
    [tabItems[0] setTitlePositionAdjustment:UIOffsetMake(0, 20)];
    [tabItems[1] setTitlePositionAdjustment:UIOffsetMake(-20, 20)];
    [tabItems[2] setTitlePositionAdjustment:UIOffsetMake(20, 20)];
    [tabItems[3] setTitlePositionAdjustment:UIOffsetMake(0, 20)];

    // set image offset
    [tabItems[0] setImageInsets:UIEdgeInsetsMake(0, 0, -30, 0)];
    ...

Pour la résolution de l'image uitabbaritem, 50x50px pour @2x, et 75x75px pour @3x.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X