Nếu view.intrinsicContentSize.width != NSViewNoIntrinsicMetric
, sau đó bố trí tự động tạo ra một ràng buộc đặc biệt của loại NSContentSizeLayoutConstraint
. Ràng buộc này hoạt động giống như hai ràng buộc thông thường:
- một ràng buộc cần
view.width <= view.intrinsicContentSize.width
có với mức độ ưu tiên ôm ngang và
- một ràng buộc yêu cầu
view.width >= view.intrinsicContentSize.width
với ưu tiên kháng nén ngang.
Trong Swift, với các neo bố cục mới của iOS 9, bạn có thể thiết lập các ràng buộc tương đương như thế này:
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)
Tương tự, nếu view.intrinsicContentSize.height != NSViewNoIntrinsicMetric
, thì bố cục tự động tạo ra một NSContentSizeLayoutConstraint
hoạt động giống như hai ràng buộc về chiều cao của chế độ xem. Trong mã, chúng sẽ trông như thế này:
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)
Bạn có thể thấy những NSContentSizeLayoutConstraint
trường hợp đặc biệt này (nếu chúng tồn tại) bằng cách in view.constraints
sau khi bố cục đã chạy. Thí dụ:
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>