web-dev-qa-db-fra.com

iOS 7 TabBar Translucent issue

J'ai un problème, lorsque je désactive la boîte translucide sur une TabBar, quelque chose bloque une partie de ma vue.

On dirait que c'est une sorte de barre d'onglets supplémentaire ou je ne sais même pas. J'utilise le storyboard.

Veuillez voir les images ci-jointes:

Avec translucide (OFF - NO):

With Translucent (OFF - NO)

Avec translucide (ON ou OUI):

With Translucent (ON or YES)

Est-ce que quelqu'un sait pourquoi ça ressemble à ça?

Merci

PS: Quelle tabBar aimez-vous? Noir ou celui-ci:

enter image description here

18
Michael Ortiz

Cela se produit dans iOS7 lorsque vous définissez tabBar.translucent à NO. iOS essaie d'être intelligent et de dire "hé la barre de tabulation n'est pas translucide donc nous ferions mieux de tout pousser par dessus". Corrigez-le en définissant la propriété extendedLayoutIncludesOpaqueBars du contrôleur de vue à l'intérieur du contrôleur de navigation qui se trouve à l'intérieur du contrôleur de tabulation sur YES.

Exemple (pas réellement exécuté):

UITabBarController *tabBarController = [[UITabBarController alloc] init];
tabBarController.tabBar.barStyle = UIBarStyleBlack;
tabBarController.tabBar.translucent = NO;

UIViewController *viewController = [[UIViewController alloc] init];
viewController.extendedLayoutIncludesOpaqueBars = YES; // <-- This is important!!!!!!

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController: viewController];

tabBarController.viewControllers = @[navigationController];

Source: https://web.archive.org/web/20160405135605/https://developer.Apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/AppearanceCustomization.html

Et BTW, j'aime mieux la barre de tabulation non translucide.

Modifier

Comme Andy l'a mentionné ci-dessous, ce drapeau n'a pas besoin d'être défini dans le code. Vous pouvez le définir dans IB si c'est ce que vous utilisez.

74
nalyd88

Comme mentionné ici vous devez définir barTintColor sur quelque chose dont vous voulez changer la couleur.

Ces paramètres s'appliquent automatiquement lorsque vous définissez un style pour barStyle ou une couleur personnalisée pour barTintColor. Si vous préférez, vous pouvez rendre la barre d'onglets opaque en définissant la propriété translucide sur NON par programme. Dans ce cas, la barre dessine un arrière-plan opaque en noir si la barre d'onglets a le style UIBarStyleBlack, blanche si la barre d'onglets a UIBarStyleDefault ou la barre d'onglets barTintColor si une valeur personnalisée est définie.

Quelque chose que j'ai utilisé pour mon projet

self.tabBarController.tabBar.barTintColor = [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:1.0];

self.tabBarController.tabBar.translucent = NO;
10
Ali Riahipour

J'ai un contrôleur avec TableView et une barre de navigation translucide et une barre de tab translucide.
Dans cette situation, en utilisant

viewController.extendedLayoutIncludesOpaqueBars = YES;

provoque un problème de chevauchement des deux barres dans ma vue de table.

Il peut être géré en définissant

viewController.edgesForExtendedLayout = UIRectEdgeBottom;

, ce qui entraîne le masquage de TableView uniquement derrière la barre d'onglets.

6
Marciano

Il semble que vous ayez configuré la vue du contrôleur de vue de sorte que son bas soit à la même position que le haut de la barre d'onglets, quand il devrait être en bas de l'écran. Si vous faites cela, votre contenu apparaîtra correctement (contenu visible via la barre d'onglets ou non), que la barre d'onglets soit définie sur translucide ou non.

2
Caleb

Pour ceux qui en fait veulent une Tabbar translucide et une vue de table (ou vue de collection pour moi) qui peuvent être vus derrière, voici ma solution pour ios 7/8:

Si vous utilisez des contraintes, vous devez en ajouter une en bas de la vue du tableau dans le "Bottom Layout Guide" afin que votre vue de table s'arrête avant la barre d'onglets. C'est un exemple avec Storyboard, mais cela peut aussi être fait en code.
enter image description here
Il vous suffit ensuite de vous assurer que vous pouvez toujours voir la vue du tableau derrière la barre d'onglets en définissant la propriété "clipsToBounds" sur NO.

self.mytableview.clipsToBounds = NO;

Ceci est ma solution, j'espère que cela aide.

1
Michael Pirotte