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.widthcó với mức độ ưu tiên ôm ngang và
- một ràng buộc yêu cầu
view.width >= view.intrinsicContentSize.widthvớ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 NSContentSizeLayoutConstrainthoạ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 NSContentSizeLayoutConstrainttrường hợp đặc biệt này (nếu chúng tồn tại) bằng cách in view.constraintssau 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>