Öyleyse view.intrinsicContentSize.width != NSViewNoIntrinsicMetric
, otomatik düzen özel bir tür kısıtlaması oluşturur NSContentSizeLayoutConstraint
. Bu kısıtlama iki normal kısıtlama gibi davranır :
view.width <= view.intrinsicContentSize.width
yatay sarılma önceliği gerektiren bir kısıtlama ve
view.width >= view.intrinsicContentSize.width
yatay sıkıştırma direnci önceliği gerektiren bir kısıtlama .
Swift'te, iOS 9'un yeni düzen bağlantılarıyla, bunun gibi eşdeğer kısıtlamalar ayarlayabilirsiniz:
let horizontalHugging = view.widthAnchor.constraint(
lessThanOrEqualToConstant: view.intrinsicContentSize.width)
horizontalHugging.priority = view.contentHuggingPriority(for: .horizontal)
let horizontalCompression = view.widthAnchor.constraint(
greaterThanOrEqualToConstant: view.intrinsicContentSize.width)
horizontalCompression.priority = view.contentCompressionResistancePriority(for: .horizontal)
Benzer şekilde, eğer view.intrinsicContentSize.height != NSViewNoIntrinsicMetric
otomatik düzen NSContentSizeLayoutConstraint
görünümün yüksekliğinde iki kısıtlama görevi gören bir düzen oluşturur . Kod olarak, şöyle görünürler:
let verticalHugging = view.heightAnchor.constraint(
lessThanOrEqualToConstant: view.intrinsicContentSize.height)
verticalHugging.priority = view.contentHuggingPriority(for: .vertical)
let verticalCompression = view.heightAnchor.constraint(
greaterThanOrEqualToConstant: view.intrinsicContentSize.height)
verticalCompression.priority = view.contentCompressionResistancePriority(for: .vertical)
Düzen çalıştıktan sonra NSContentSizeLayoutConstraint
yazdırarak bu özel örnekleri (varsa) görebilirsiniz view.constraints
. Misal:
label.constraints.forEach { print($0) }
// Output:
<NSContentSizeLayoutConstraint:0x7fd82982af90 H:[UILabel:0x7fd82980e5e0'Hello'(39)] Hug:250 CompressionResistance:750>
<NSContentSizeLayoutConstraint:0x7fd82982b4f0 V:[UILabel:0x7fd82980e5e0'Hello'(21)] Hug:250 CompressionResistance:750>