Quelqu'un a-t-il un problème avec le simulateur iPhone X autour du composant UITabBar?
Le mien semble rendre les icônes et le titre les uns sur les autres, je ne suis pas sûr s'il me manque quelque chose, je l'ai également exécuté dans le simulateur de l'iPhone 8, et sur un appareil réel où ça a l'air bien, comme indiqué sur le planche d'histoire.
iPhone X:
iPhone 8
Réponses:
J'ai pu contourner le problème en appelant simplement invalidateIntrinsicContentSize sur UITabBar dans viewDidLayoutSubviews.
Remarque: Le bas de la barre d'onglets devra être contenu au bas de la vue principale, plutôt que dans la zone de sécurité, et la barre d'onglets ne doit avoir aucune contrainte de hauteur.
la source
[self.view layoutIfNeeded]
.landscapeImage
propriété du bouton de la barre d'onglets. Les tailles recommandées sont dans [Apple HIG's] ( developer.apple.com/design/human-interface-guidelines/ios/… ) sous Taille d'icône personnaliséeLa réponse fournie par VoidLess ne corrige que partiellement les problèmes de TabBar. Il corrige les problèmes de mise en page dans la barre d'onglets, mais si vous utilisez viewcontroller qui masque la barre d'onglets, la barre d'onglets est rendue de manière incorrecte pendant les animations (pour la reproduire, il est préférable d'avoir 2 segues - une modale et une poussée. Si vous alternez les segues, vous pouvez voir la barre d'onglets rendue déplacée). Le code ci-dessous résout les deux problèmes. Bon travail de pomme.
Code Objective-C:
la source
Il existe une astuce par laquelle nous pouvons résoudre le problème.
Cela fonctionne vraiment pour moi.
Ou vous pouvez suivre ce lien pour plus de détails.
la source
remplacement
UITabBar
sizeThatFits(_)
pour safeAreala source
J'ai ajouté ceci à
viewWillAppear
ma coutumeUITabBarController
, car aucune des réponses fournies n'a fonctionné pour moi:la source
J'ai eu le même problème.
Si je place une constante non nulle sur la contrainte inférieure de l'UITabBar à la zone de sécurité:
Cela commence à fonctionner comme prévu ...
C'est le seul changement que j'ai fait et je ne sais pas pourquoi cela fonctionne, mais si quelqu'un le fait, j'aimerais le savoir.
la source
Déplacer la barre d'onglets à 1 point du bas a fonctionné pour moi.
Bien sûr, vous obtiendrez un vide en le faisant que vous devrez combler d'une manière ou d'une autre, mais le texte / les icônes sont maintenant correctement positionnés.
la source
Ah! C'est en fait magique!
J'ai finalement compris cela après des heures à maudire Apple.
UIKit gère cela pour vous, et il semble que les éléments de la barre d'onglets décalés soient dus à une configuration incorrecte (et probablement à un bogue UIKit réel). Il n'y a pas besoin de sous-classification ou de vue d'arrière-plan.
UITabBar "fonctionnera simplement" s'il est contraint au bas du superview, PAS à la zone de sécurité inférieure .
Cela fonctionne même dans le constructeur d'interface.
Configuration correcte
Parfois ça ne marche toujours pas
Ce qui est vraiment stupide, c'est que vous pouvez également voir le bogue dans IB, même si vous ajoutez les contraintes exactes qu'IB ajoute dans les étapes ci-dessus!
la source
Corrigé en utilisant UITabBar sous-classé pour appliquer safeAreaInsets:
la source
Résolu pour moi en appelant
[tabController.view setNeedsLayout];
après avoir rejeté le modal dans le bloc d'achèvement.la source
L'UITabBar augmente en hauteur pour être au-dessus du bouton / de la ligne d'accueil, mais dessine la sous-vue à son emplacement d'origine et superpose l'UITabBarItem sur la sous-vue.
Pour contourner ce problème, vous pouvez détecter l'iPhone X, puis réduire la hauteur de la vue de 32 pixels pour vous assurer que la barre d'onglets est affichée dans la zone de sécurité au-dessus de la ligne d'accueil.
Par exemple, si vous créez votre TabBar, remplacez par programme
Avec ça:
REMARQUE: cela pourrait bien être un bogue, car les tailles de vue et la disposition de la barre d'onglets sont définies par le système d'exploitation. Il devrait probablement s'afficher selon la capture d'écran d'Apple dans les directives de l'interface humaine de l'iPhone X ici: https://developer.apple.com/ios/human-interface-guidelines/overview/iphone-x/
la source
Mon cas était que j'avais défini une hauteur UITabBar personnalisée dans mon UITabBarController, comme ceci:
La suppression de ce code était la solution pour que la TabBar s'affiche correctement sur l'iPhone X.
la source
La solution la plus simple que j'ai trouvée était d'ajouter simplement un espace de 0,2 pt entre le bas de la barre d'onglets et le bas de safeAreaLayoutGuide.bottomAnchor comme ça.
la source
J'avais le même problème lorsque j'essayais de définir le cadre de UITabBar dans mon TabBarController personnalisé.
Lorsque je l'ai juste ajusté à la nouvelle taille, le problème a disparu
la source
kPhoneXTabBarHeight
?J'ai rencontré cela aujourd'hui avec un UITabBar ajouté manuellement au contrôleur de vue dans le storyboard.Lors de l'alignement au bas de la zone de sécurité avec une constante de 0, j'obtiendrais le problème, mais le changer à 1 résoudrait le problème. Avoir l'UITabBar 1 pixel de plus que la normale était acceptable pour mon application.
la source
Je me suis gratté la tête sur ce problème. Il semble être associé à la façon dont la tabBar est initialisée et ajoutée pour afficher la hiérarchie. J'ai également essayé les solutions ci-dessus telles que l'appel
invalidateIntrinsicContentSize
, la définition du cadre et égalementbottomInsets
dans une sous-classe UITabBar. Ils semblent cependant fonctionner temporairement et ils rompent avec un autre scénario ou régressent la barre d'onglets en provoquant un problème de mise en page ambigu. Lorsque j'ai débogué le problème, j'ai essayé d'attribuer les contraintes de hauteur à UITabBar et centerYAnchor, mais aucun n'a résolu le problème. J'ai réalisé dans le débogueur de vue que la hauteur de tabBar était correcte avant et après le problème reproduit, ce qui m'a amené à penser que le problème était dans les sous-vues. J'ai utilisé le code ci-dessous pour résoudre ce problème avec succès sans régresser aucun autre scénario.Hypothèses: je ne fais cela que pour l'iPhone X, car il ne semble pas se reproduire sur aucun autre appareil pour le moment. Est basé sur l'hypothèse qu'Apple ne change pas le nom de la classe UITabBarButton dans les futures versions d'iOS. Nous faisons cela sur UITabBarButton uniquement lorsque cela signifie que si Apple ajoute plus de sous-vues internes à UITabBar, nous devrons peut-être modifier le code pour s'adapter à cela.
S'il vous plaît laissez-moi savoir si cela fonctionne, sera ouvert aux suggestions et améliorations!
Il devrait être simple de créer un équivalent rapide pour cela.
la source
viewDidAppear(animated:)
monUITabBarController
et ça a bien fonctionné. Merci!De ce tutoriel:
https://github.com/eggswift/ESTabBarController
et après l'initialisation de la barre d'onglets en écrivant cette ligne dans la classe appdelegate
Résout mon problème de barre d'onglets.
J'espère que cela résout votre problème
Merci
la source
Sélectionnez la barre d'onglets et cochez la case "Enregistrer les marges relatives de la zone" dans l'éditeur d'inspecteur comme ceci:
la source
J'ai eu le même problème, au début, il a été rendu correctement mais après l'installation
badgeValue
sur l'un des tabBarItem, il a cassé la mise en page. Ce qui a fonctionné pour moi sans sous-classerUITabBar
était ceci, sur maUITabBarController
sous-classe déjà créée .J'ai utilisé tabBar superview pour m'assurer que les contraintes / ancres sont sur la même hiérarchie de vues et éviter les plantages.
D'après ce que j'ai compris, puisque cela semble être un bogue UIKit, nous devons juste réécrire / redéfinir les contraintes de la barre d'onglets pour que le moteur de mise en page automatique puisse à nouveau disposer correctement la barre d'onglets.
la source
Si vous avez une contrainte de hauteur pour la barre d'onglets, essayez de la supprimer.
Face au même problème et la suppression de cela a résolu le problème.
la source
J'ai créé un nouveau UITabBarController dans mon storyboard et poussé tous les contrôleurs de vue vers ce nouveau UITabBarConttoller. Donc, tout fonctionne bien dans le simulateur iPhone X.
la source
Pour iPhone, vous pouvez le faire, sous-classe UITabBarController.
Accédez à Storyboard et autorisez Utiliser le guide de mise en page de zone sûre et changez la classe de UITabbarController en MyTabBarController
PS Cette solution n'est pas testée en cas d'application universelle et iPad.
la source
essayez de changer l'écran de démarrage avec une taille @ 3x est (3726 × 6624)
la source
Pour moi, supprimez le
[self.tabBar setBackgroundImage:]
travail, c'est peut-être un bogue UIKitla source
Pour moi, cela a résolu tous les problèmes:
la source
J'utilisais un
UITabBarController
dans le storyboard et au début, cela fonctionnait bien pour moi, mais après la mise à niveau vers la nouvelle version de Xcode, cela a commencé à me poser des problèmes liés à la hauteur de la tabBar.Pour moi, le correctif consistait à supprimer l'existant
UITabBarController
du storyboard et à le recréer en le faisant glisser depuis la bibliothèque d'objets du générateur d'interface .la source
Pour ceux qui écrivent entièrement par
UITabBarController
programme, vous pouvez utiliserUITabBarItem.appearance().titlePositionAdjustment
pour ajuster la position du titreDonc, dans ce cas où vous souhaitez ajouter un espace entre l'icône et le titre, utilisez-le dans
viewDidLoad
:détection si l'appareil a un écran Notch:
la source
J'avais le même problème qui a été résolu en définissant les éléments de la tabBar après la disposition de la barre d'onglets.
Dans mon cas, le problème est survenu lorsque:
la source
Je pense que c'est un bug UIKit de iPhoneX. parce que ça marche:
la source
Je pense que vous disposez peut-être de la barre d'onglets contre le guide de mise en page sécurisé inférieur. Ce n'est probablement pas ce que vous voulez car la barre d'onglets semble faire ses propres calculs pour positionner les éléments de la barre d'onglets en toute sécurité au-dessus de la ligne d'accueil dans l'iPhone X. Configurez votre contrainte inférieure contre le bas de la vue . Vous devriez voir qu'il se présente correctement sur l' iPhone X ainsi que sur d'autres iPhones.
la source