Ich kann in der Apple-Dokumentation zu Cocoa Autolayout keine eindeutige Antwort auf den Unterschied zwischen Inhaltsumarmung und Komprimierungsbeständigkeit finden.
Kann jemand ihre Verwendung und ihren Unterschied erklären?
cocoa
autolayout
dmitrynikolaev
quelle
quelle
content-hugging
: würden Sie gegen Leerzeichen kämpfen. Es würde nur den Blick zwingen, um dich herumzukommen. Aber wenn Sie nicht zu viel Platz haben, und stattdessen haben sehr wenig Platz danncontent-compressions-resistance
gegen Ihre Ansicht kämpfen würde aus nicht in der Lage sind , alle seine Inhalte zu zeigen, zB Etiketten würden abgeschnitten bekommen.Antworten:
Eine kurze Zusammenfassung der Konzepte:
Beispiel:
Angenommen, Sie haben eine Schaltfläche wie diese:
und Sie haben die Kanten an eine größere Übersicht mit Priorität 500 angeheftet.
Wenn dann die Umarmungspriorität> 500 ist, sieht es folgendermaßen aus:
Wenn die Umarmungspriorität <500 ist, sieht es so aus:
Wenn die Übersicht jetzt verkleinert wird und die Priorität für den Komprimierungswiderstand> 500 ist, sieht dies folgendermaßen aus
Andernfalls könnte die Kompressionswiderstandspriorität <500 folgendermaßen aussehen:
Wenn es so nicht funktioniert, haben Sie wahrscheinlich einige andere Einschränkungen, die Ihre gute Arbeit durcheinander bringen!
Sie könnten es beispielsweise mit der Priorität 1000 an die Übersicht anheften lassen. Oder Sie könnten eine Breitenpriorität haben. Wenn ja, kann dies hilfreich sein:
Editor> Größe an Inhalt anpassen
quelle
Schauen Sie sich dieses Video- Tutorial über Autolayout an , sie erklären es sorgfältig
quelle
Quelle: @mokagio
Größe des eigentlichen Inhalts Inhaltsgröße - Ziemlich selbsterklärend, aber Ansichten mit variablem Inhalt wissen, wie groß ihr Inhalt ist, und beschreiben die Größe ihres Inhalts über diese Eigenschaft. Einige offensichtliche Beispiele für Ansichten mit intrinsischen Inhaltsgrößen sind UIImageViews, UILabels, UIButtons.
Priority Hugging Priority - Je höher diese Priorität ist, desto mehr kann eine Ansicht nicht größer werden als ihre eigentliche Inhaltsgröße.
Widerstandspriorität für die Komprimierung von Inhalten - Je höher diese Priorität ist, desto mehr widersteht eine Ansicht dem Verkleinern, das kleiner als ihre eigentliche Inhaltsgröße ist.
Weitere Erklärungen finden Sie hier: AUTO LAYOUT MAGIC: PRIORITÄTEN FÜR DIE INHALTSGRÖSSE
quelle
Angenommen, Sie haben eine Schaltfläche mit dem Text "Click Me". Welche Breite sollte dieser Knopf haben?
Erstens möchten Sie definitiv nicht, dass die Schaltfläche kleiner als der Text ist. Andernfalls würde der Text abgeschnitten. Dies ist die Priorität des horizontalen Kompressionswiderstands.
Zweitens möchten Sie nicht, dass die Schaltfläche größer ist, als sie sein muss. Eine Schaltfläche, die so aussah, [Click Me], ist offensichtlich zu groß. Sie möchten, dass die Schaltfläche ihren Inhalt ohne zu viel Polsterung "umarmt". Dies ist die Priorität des horizontalen Inhalts. Für eine Schaltfläche ist sie nicht so stark wie die Priorität für den horizontalen Kompressionswiderstand.
quelle
Wenn
view.intrinsicContentSize.width != NSViewNoIntrinsicMetric
, dann erstellt das automatische Layout eine spezielle Einschränkung des TypsNSContentSizeLayoutConstraint
. Diese Einschränkung wirkt wie zwei normale Einschränkungen:view.width <= view.intrinsicContentSize.width
mit der horizontalen Umarmungspriorität erfordert , undview.width >= view.intrinsicContentSize.width
mit der Priorität des horizontalen Kompressionswiderstands .In Swift können Sie mit den neuen Layout-Ankern von iOS 9 entsprechende Einschränkungen festlegen:
In ähnlicher Weise wird beim
view.intrinsicContentSize.height != NSViewNoIntrinsicMetric
automatischen Layout ein Layout erstelltNSContentSizeLayoutConstraint
, das sich wie zwei Einschränkungen für die Höhe der Ansicht verhält. Im Code würden sie so aussehen:Sie können diese speziellen
NSContentSizeLayoutConstraint
Instanzen (falls vorhanden) anzeigen, indem Sieview.constraints
nach dem Ausführen des Layouts drucken . Beispiel:quelle
Die Prioritäten für das Umarmen von Inhalten und die Beständigkeit gegen Komprimierung von Inhalten gelten für Elemente, deren Größe abhängig von den eingehenden Inhalten berechnet werden kann.
Aus Apple-Dokumenten :
quelle
Das
Content hugging priority
ist wie ein Gummiband , das um eine Ansicht gelegt wird. Je höher der Prioritätswert, desto stärker das Gummiband und desto mehr möchte es an seine Inhaltsgröße anpassen. Der Prioritätswert kann wie die "Stärke" des Gummibands vorgestellt werdenUnd das
Content Compression Resistance
heißt, wie sehr sich eine Ansicht "widersetzt", kleiner zu werden. Die Ansicht mit dem höheren Widerstandsprioritätswert ist diejenige, die der Komprimierung widersteht.quelle