web-dev-qa-db-fra.com

Quelle est la différence entre la taille intrinsèque et les contraintes de largeur/hauteur du système?

Commencez par passer de la mise en page des ressorts et des structures à la mise en page automatique et posez des questions sur le paramètre "Taille intrinsèque".

Si vous définissez "Taille intrinsèque" d'une vue sur "Placeholder" et que vous définissez des valeurs de largeur et de hauteur, la vue ne sera pas redimensionnée et restera à la taille fixe. Mais si nous définissons "Taille intrinsèque" sur "Par défaut (défini par le système)", le système décidera et redimensionnera la vue si nécessaire pendant l'exécution.

Cependant, nous pourrions explicitement définir des contraintes système de largeur et de hauteur pour la vue en utilisant Ctrl + Drag. Dans un tel cas, il y aurait des contraintes de largeur et de hauteur système ET des valeurs de marque de réservation const. J'examine le code existant et j'essaie de comprendre s'il s'agit d'un bogue et que les contraintes de largeur et de hauteur du système redondant doivent être supprimées OR il existe une autre logique cachée. Cependant, Xcode n’affiche pas d’avertissements, etc. dans la console lors de l’exécution. Voici un écran d'impression du projet de démonstration:

enter image description here

16
Centurion

Lorsque vous définissez la taille intrinsèque sur "Placeholder", vous indiquez au système de disposition Xcode que la taille de votre vue dépend de son contenu (comme une étiquette peut dépendre de son contenu textuel). Le système ne connaît et ne gère que ses propres types de vues avec une taille intrinsèque. Si vous souhaitez vivre une expérience similaire avec une vue de vous, considérez la vue comme si elle avait une taille intrinsèque. Vous définissez ensuite vos contraintes comme si la vue devait être agrandie ou réduite en fonction de son contenu. Enfin, vous implémentez la méthode intrinsicContentSize pour calculer et renvoyer la taille correcte du contenu. Si le contenu change et qu'un nouveau calcul doit être effectué, vous appelez invalidateIntrinsicContentSize dans votre affichage. En fonction de la manière dont vous avez défini vos contraintes, votre vue s'agrandira et/ou se réduira ou elle sera statique (comme vous pouvez définir des contraintes de largeur et de hauteur sur une étiquette, qui reste statique).

30
Leo Natan

si vous connaissez wrap_content à partir d'Android, la intrinsicContentSize est identique à wrap_content.

4
Mehrdad Faraji

Chaque vue contenant du contenu peut calculer sa taille de contenu intrinsèque. La taille du contenu intrinsèque est calculée par une méthode sur chaque instance UIView. Cette méthode retourne une instance CGSize

1
BuLB JoBs

Lorsque la taille Intrinsic est définie sur Placeholder, containerView calcule sa propre hauteur en fonction de sa sous-vue (containeeView).

containerView augmente ou diminue en fonction de son contenu.

Définissez la largeur et la position de la vue, et non de height. Définissez view.intrinsicSize = Placeholder. Placez une étiquette à l'intérieur de la vue. Libérez l'étiquette de toutes les bordures de la vue. Ne définissez pas la hauteur de l'étiquette (ou la hauteur avec l'opérateur = =. opérateur) -set label as lines = 0, lineBreak = WordWrap

En fonction de la taille du contenu, l’étiquette grossira ou rétrécira. La vue grandira ou diminuera en fonction de la hauteur de l'étiquette.

0
Add080bbA