그렇다면 view.intrinsicContentSize.width != NSViewNoIntrinsicMetric
, 자동 레이아웃은 특별한 유형의 제약을 만듭니다 NSContentSizeLayoutConstraint
. 이 제약 조건은 두 가지 일반 제약 조건 처럼 작동합니다.
- 요구되는 제약
view.width <= view.intrinsicContentSize.width
수평 포옹 우선 순위를 로 및
view.width >= view.intrinsicContentSize.width
수평 압축 저항 우선 순위를 요구하는 제약 .
Swift에서 iOS 9의 새로운 레이아웃 앵커를 사용하여 다음과 같은 동등한 제약 조건을 설정할 수 있습니다.
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)
마찬가지로 view.intrinsicContentSize.height != NSViewNoIntrinsicMetric
이면 자동 레이아웃은 NSContentSizeLayoutConstraint
뷰 높이에 대한 두 가지 구속 조건처럼 작동 하는 을 만듭니다 . 코드에서는 다음과 같습니다.
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)
레이아웃이 실행 된 후 NSContentSizeLayoutConstraint
인쇄하여 이러한 특수 인스턴스 (있는 경우)를 볼 수 있습니다 view.constraints
. 예:
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>