Ich kann in der Apple-Dokumentation keine klare Antwort zum Cocoa Autolayout über den Unterschied zwischen "content hugging" und "compression resistance" finden.
Kann mir jemand ihre Verwendungen und Unterschiede erklären?
Ich kann in der Apple-Dokumentation keine klare Antwort zum Cocoa Autolayout über den Unterschied zwischen "content hugging" und "compression resistance" finden.
Kann mir jemand ihre Verwendungen und Unterschiede erklären?
Huggen des Inhalts und Prioritäten für die Widerstandskraft des Inhalts funktionieren für Elemente, die ihre Größe intrinsisch berechnen können, abhängig von den Inhalten, die eingehen.
Von Apple Docs:
Die Inhalts-Halte-Priorität
ist wie ein Gummiband, das um eine Ansicht gelegt wird. Je höher der Prioritätswert, desto stärker ist das Gummiband und desto mehr möchte es sich an die Inhaltsgröße anpassen. Der Prioritätswert kann als die "Stärke" des Gummibands betrachtet werden.
Und der Inhalts-Kompressionswiderstand
ist, wie sehr eine Ansicht sich dagegen wehrt, kleiner zu werden. Die Ansicht mit einem höheren Widerstandsprioritätswert ist diejenige, die sich gegen Kompression wehrt.
contentCompressionResistancePriority - Die Ansicht mit dem niedrigsten Wert wird abgeschnitten, wenn nicht genügend Platz ist, um den intrinsicContentSize
alles zu passen
contentHuggingPriority - Die Ansicht mit dem niedrigsten Wert wird über ihr intrinsicContentSize
hinaus erweitert, wenn noch Platz zum Füllen vorhanden ist
Beim Nachdenken über diese beiden Prioritäten müssen wir die Bedingungen berücksichtigen.
Wenn der Platz für zwei oder mehr Widgets ausreicht, betrachten wir die hugging priority
. Die Priorität ist geringer, es wird den Überschussplatz einnehmen, und andere Widgets nehmen nur die Intrinsische Inhaltsgröße ein.
Wenn der Platz für Widgets nicht ausreicht, berücksichtigen wir auch den Content Compression Resistance
.
iOS AutoLayout - Inhaltsgröße und Priorität von Inhaltsumarmung und Inhaltskomprimierungswiderstand (CHCR)
Inhaltsgröße
Inhaltsgröße -> Constraint -> AutoLayout Engine -> Zeichnen
AutoLayout
verwendet die Inhaltsgröße
, um implizite Einschränkungen (Breite und/oder Höhe) zu erstellen
Die Inhaltsgröße gibt an, wie viel Platz (Breite und/oder Höhe) benötigt wird, um den vollen Inhalt anzuzeigen.
Nicht alle Ansichten haben eine Inhaltsgröße
UIView und NSView - Keine eingebaute Inhaltsgröße
UIView
Objekt hat sie nicht, und die UIView
Klasse hat die Variable intrinsicContentSize
, die von einer Unterklasse überschrieben werden kann. Zum Beispiel hat das UILabel
eine eigene Realisierung, die auf Text- und Schriftattribute basiertUIView
verwendet die Standardrealisierung mit UIView.noIntrinsicMetric (-1)Pseudocode:
import UIKit
class UIView {
override var intrinsicContentSize: CGSize {
return CGSize(width: UIView.noIntrinsicMetric, height: UIView.noIntrinsicMetric)
}
}
Wenn Sie die intrinsicContentSize
neu berechnen und neu zeichnen müssen, rufen Sie view.invalidateIntrinsicContentSize()
auf
intrinsicContentSize
vs sizeToFit()
. intrinsicContentSize
ist für AutoLayout, sizeToFit()
ist für auf Rahmen basierende Ansichten.
view.sizeToFit()
aufview.sizeThatFits(_ size: CGSize)
. Die Größe ist normalerweise view.bounds.sizePriorität für Inhaltsumarmung und Inhaltskomprimierungswiderstand(CHCR)
Jede Ansicht hat eine CHCR-Priorität für jede Dimension (horizontal, vertikal), aber sie wird nur auf Ansichten mit intrinsicContentSize
angewandt. Sie hat auch einen Einfluss auf die Priorität der Einschränkung
Priorität für Inhaltsumarmung(CHP)(Standardwert ist 251)
Verhindert Ausdehnung. Höhere Priorität - verhindert, dass die Ansicht größer wird als die Inhaltsgröße.
Priorität für Inhaltskomprimierungswiderstand(CRP)(Standardwert ist 750)
Verhindert Zusammenziehung. Höhere Priorität - verhindert, dass die Ansicht kleiner wird als die Inhaltsgröße.
Experimente:
Zwei UILabels (Label 1, Label 2), die horizontal nebeneinander angeordnet sind
Warnung:
Inhaltsprioritätsambiguität Verringern Sie die horizontale Umarmung...
Warnung:
Inhaltsprioritätsambiguität Verringern Sie den horizontalen Kompressionswiderstand...
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.