の場合view.intrinsicContentSize.width != NSViewNoIntrinsicMetric
、自動レイアウトはタイプの特別な制約を作成しますNSContentSizeLayoutConstraint
。この制約は、2つの通常の制約のように機能します。
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
ビューの高さに対する2つの制約のように機能するを作成します。コードでは、次のようになります。
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>