web-dev-qa-db-fra.com

Vues mal placées à chaque redémarrage de Xcode

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?

62
djibouti33

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.

2
SHN

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.

2
SoftDesigner

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.

2

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 :)

1
X140Yu

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

0
user4886069

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

0
Sameh Salama

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.

0
priya bagrecha

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.

0
Nupur Gupta

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:

  • Sélectionnez View Controller qui vous pose des problèmes
  • Résoudre les problèmes de mise en page automatique (en bas à droite)
  • Vues sélectionnées: réinitialiser les contraintes suggérées

Pour vérifier quelles contraintes ont été réinitialisées:

  • Sélectionnez chaque vue dans le contrôleur
  • Inspecteur des contraintes (en haut à droite)
  • faites défiler vers le bas et examinez les contraintes
0
Allen
  1. cliquez pour prévisualiser un fichier normal (pas .xib ou .storyboard fichier)
  2. quitter Xcode
  3. courir git checkout .
  4. redémarrer Xcode

les .storyboard le fichier n'est pas modifié maintenant.

0
Longfei Wu