Jika view.intrinsicContentSize.width != NSViewNoIntrinsicMetric
, maka tata letak otomatis menciptakan batasan tipe khusus NSContentSizeLayoutConstraint
. Batasan ini bertindak seperti dua batasan normal:
- kendala yang membutuhkan
view.width <= view.intrinsicContentSize.width
dengan prioritas memeluk horisontal, dan
- kendala yang diperlukan
view.width >= view.intrinsicContentSize.width
dengan prioritas ketahanan kompresi horisontal.
Di Swift, dengan jangkar tata letak baru iOS 9, Anda dapat mengatur batasan yang setara seperti ini:
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)
Demikian pula, jika view.intrinsicContentSize.height != NSViewNoIntrinsicMetric
, maka tata letak otomatis membuat NSContentSizeLayoutConstraint
yang bertindak seperti dua kendala pada ketinggian tampilan. Dalam kode, mereka akan terlihat seperti ini:
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)
Anda dapat melihat NSContentSizeLayoutConstraint
contoh khusus ini (jika ada) dengan mencetak view.constraints
setelah tata letak telah berjalan. Contoh:
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>