Je ne trouve pas de réponse claire sur la documentation d'Apple concernant Cocoa Autolayout concernant la différence entre l'étirement du contenu et la résistance à la compression.
Quelqu'un peut-il expliquer ses usages et sa différence?
cocoa
autolayout
dmitrynikolaev
la source
la source
content-hugging
: vous vous battez contre un espace blanc. Cela forcerait simplement la vue à vous contourner. Mais si vous n'avez pas trop d'espace, et que vous avez à la place très peu de place, alors vous vouscontent-compressions-resistance
battriez contre votre vue de ne pas pouvoir afficher tout son contenu, par exemple, les étiquettes seraient tronquées.Réponses:
Un bref résumé des concepts:
Exemple:
Disons que vous avez un bouton comme celui-ci:
et vous avez épinglé les bords à une vue d'ensemble plus grande avec la priorité 500.
Ensuite, si la priorité à l'étreinte> 500, cela ressemblera à ceci:
Si la priorité à l'étreinte <500, cela ressemblera à ceci:
Si la vue d'ensemble rétrécit maintenant, si la priorité de résistance à la compression> 500, cela ressemblera à ceci
Sinon, si la priorité à la résistance à la compression est <500, cela pourrait ressembler à ceci:
Si cela ne fonctionne pas ainsi, vous avez probablement d'autres contraintes qui gâchent votre bon travail!
Par exemple, vous pouvez l'épingler à la vue d'ensemble avec la priorité 1000. Ou vous pouvez avoir une priorité de largeur. Si oui, cela peut être utile:
Editeur> Ajuster au contenu
la source
Jetez un oeil à ce tutoriel vidéo sur Autolayout , ils l'expliquent soigneusement
la source
source: @mokagio
Taille de contenu intrinsèque - assez explicite, mais les vues avec un contenu variable sont conscientes de la taille de leur contenu et décrivent la taille de leur contenu via cette propriété. UIImageViews, UILabels, UIButtons sont des exemples évidents de vues qui ont des tailles de contenu intrinsèques.
Content Hugging Priority - Plus cette priorité est élevée, plus une vue résiste à devenir plus grande que sa taille de contenu intrinsèque.
Priorité de résistance à la compression du contenu - Plus cette priorité est élevée, plus une vue résiste à rétrécir plus petite que sa taille de contenu intrinsèque.
Cochez ici pour plus d'explications: MAGIE DE MISE EN PAGE AUTOMATIQUE: PRIORITÉS DE TAILLE DU CONTENU
la source
Disons que vous avez un bouton avec le texte "Click Me". Quelle largeur doit avoir ce bouton?
Tout d'abord, vous ne voulez certainement pas que le bouton soit plus petit que le texte. Sinon, le texte serait tronqué. Il s'agit de la priorité de résistance à la compression horizontale.
Deuxièmement, vous ne voulez pas que le bouton soit plus grand qu'il ne devrait l'être. Un bouton qui ressemblait à ceci, [Click Me], est évidemment trop gros. Vous voulez que le bouton "embrasse" son contenu sans trop de remplissage. Il s'agit de la priorité d'élargissement du contenu horizontal. Pour un bouton, il n'est pas aussi fort que la priorité de résistance à la compression horizontale.
la source
Si
view.intrinsicContentSize.width != NSViewNoIntrinsicMetric
, la mise en page automatique crée une contrainte de type spécialeNSContentSizeLayoutConstraint
. Cette contrainte agit comme deux contraintes normales:view.width <= view.intrinsicContentSize.width
avec la priorité de calage horizontal, etview.width >= view.intrinsicContentSize.width
avec la priorité de résistance à la compression horizontale.Dans Swift, avec les nouvelles ancres de mise en page d'iOS 9, vous pouvez configurer des contraintes équivalentes comme ceci:
De même, si
view.intrinsicContentSize.height != NSViewNoIntrinsicMetric
, la mise en page automatique crée unNSContentSizeLayoutConstraint
qui agit comme deux contraintes sur la hauteur de la vue. Dans le code, ils ressembleraient à ceci:Vous pouvez voir ces
NSContentSizeLayoutConstraint
instances spéciales (si elles existent) en imprimantview.constraints
après l'exécution de la mise en page. Exemple:la source
Les priorités de contention de contenu et de compression de contenu fonctionnent pour les éléments qui peuvent calculer leur taille intrinsèquement en fonction du contenu entrant.
Depuis les documents Apple :
la source
C'est
Content hugging priority
comme un élastique qui est placé autour d'une vue. Plus la valeur de priorité est élevée, plus la bande élastique est forte et plus elle souhaite s'adapter à la taille de son contenu. La valeur de priorité peut être imaginée comme la "résistance" de l'élastiqueEt
Content Compression Resistance
c'est à quel point une vue «résiste» à devenir plus petite La vue avec une valeur de priorité de résistance plus élevée est celle qui résistera à la compression.la source