J'utilise des storyboards pour la première fois dans mon application
Lorsque je ferme Xcode, je n'ai aucun avertissement concernant les vues mal placées ou tout ce qui concerne mon storyboard. Lorsque je redémarre Xcode et ouvre le storyboard, 3 de mes 15 scènes ont des avertissements de vue mal placés.
Sans rien toucher (autre que la sélection du fichier), je peux émettre un git status
et vérifiez que le fichier .storyboard a été modifié. Si je git diff
, Je vois cela dans plusieurs zones du fichier:
<variation key="widthClass=compact" misplaced="YES">
<rect key="frame" x="8" y="56" width="130" height="34"/>
</variation>
Si un élément avait déjà <variation key="widthClass=Compact"
node, puis l'attribut misplaced
et rect
node sont ajoutés.
La seule chose que je dois faire pour que les avertissements disparaissent est de cliquer sur chacun d'eux, de vous assurer que "Mettre à jour le cadre" est sélectionné et de cliquer sur "Corriger le mauvais placement". Cela corrige tout jusqu'à ce que je redémarre Xcode.
La structure de base de ma scène est:
UIView
UICollectionView
UICollectionReusableView
UICollectionViewCell
UICollectionViewCell
UISegmentedControl
Comment puis-je empêcher que cela se produise à chaque redémarrage?
Une raison possible des vues mal placées est la suivante: si vous avez utilisé des vues en direct (IBDesignables) dans les storyboards, puis si vous ouvrez le storyboard et passez rapidement à un autre fichier avant que l'IB ait fini de construire toutes les vues en direct, les vues sont mal placées. L'IB commence à créer les vues en direct dès que vous affichez le story-board dans l'éditeur. Pour corriger les vues mal placées, laissez à IB le temps de terminer la construction du storyboard en restant sur le storyboard pendant quelques instants, et les vues mal placées seront corrigées.
Dans mon cas, cela se produit pour toutes les étiquettes/boutons avec des polices personnalisées et des tailles intrinsèques (non explicitement définies). Ressemble à un bogue Xcode.
Cela se produit généralement lorsque vous n'avez pas correctement défini les contraintes.
Essayez de supprimer toutes les vues à l'intérieur de l'UIViewController et de les ajouter à nouveau avec vos contraintes.
Nettoyez et exécutez votre code.
Je fais face au même problème avant, et je suppose que ce n'est pas de notre faute, c'est juste un bug de Xcode.
Si votre .storyboard
le fichier a changé mais vous n'avez rien touché, sélectionnez simplement le fichier et sélectionnez le menu Xcode Source Control
-> Discard Changes in "xxxx.storyboard"...
, ça devrait être du travail :)
J'avais l'habitude de faire face au même problème avec mon application précédente. Ce que j'ai remarqué, c'est que la taille des story-boards est importante ici.
Il s'agit d'un problème Xcode.
Si nous utilisons un storyboard de n'importe quelle largeur, quelle hauteur, ce problème ne se produit pas. Si vous utilisez des storyboards de taille largeur régulière de hauteur compacte, ce problème se produit.
Essayez donc d'utiliser tailles de storyboard par défaut dans Xcode
Ce problème se produit lorsque vous ajoutez des contraintes qui ne correspondent pas à la taille d'écran réelle au moment de l'exécution. par exemple: si vous avez un UIButton avec une largeur qui dépasse la largeur de l'écran (disons largeur 600) et que vous ajoutez une contrainte de largeur fixe à cet UIButton mais pas de contrainte de début ou de fin, Xcode ne vous donnera pas d'avertissement car il n'y a pas de conflits, mais lorsque vous exécutez réellement l'application sur un appareil ou un simulateur avec une largeur d'écran inférieure à 600, Xcode ajuste automatiquement la largeur du bouton UIB pour s'adapter à la largeur de l'écran qui est inférieure à 600, ce qui fait que vos contraintes de mise en page changent en fonction de la taille de l'écran lors de l'exécution
Au bas du storyboard, nous avons la possibilité de sélectionner la classe de taille. Si je change l'option de wRegular hRegular en toute autre option, j'obtiens le même problème. Je n'en connais pas la raison.
Essayez de le résoudre en sélectionnant la même classe de taille après avoir ouvert le projet que vous avez sélectionné avant de fermer le projet.
Par exemple, si vous avez sélectionné la classe de taille comme wCompact hRegular pour iPhone et que vous avez fermé votre projet. Après avoir rouvert le projet, vous verrez que la classe de taille a changé en wRegular hRegular. Pour cette raison, les objets de vue changent. Sélectionnez à nouveau wCompact hRegular pour résoudre le problème.
J'espère que cela vous aidera.
Si vous utilisez des classes de taille, alors vos contraintes ne sont pas à la hauteur (selon tous les types d'appareils si Any-Any). Sinon, essayez de régler le cadre ou les contraintes et vérifiez à nouveau.
La mise en page automatique peut également provoquer ce problème. Vous obtiendrez toutes les informations concernant l'avertissement une fois que vous aurez cliqué dessus.
Une solution simple peut être de permettre simplement à Xcode de choisir des contraintes pour vous, puis de revenir en arrière et de vérifier ce qu'il a choisi pour être sûr que cela fonctionnera pour vous.
Dans le storyboard:
Pour vérifier quelles contraintes ont été réinitialisées:
.xib
ou .storyboard
fichier)git checkout .
les .storyboard
le fichier n'est pas modifié maintenant.