web-dev-qa-db-ja.com

UIViewのコンテンツ圧縮耐性とコンテンツハグとは何ですか?

UIViewのコンテンツ圧縮耐性とコンテンツハグとは何ですか?これらは、ビューの本質的なコンテンツサイズとどのように関連していますか?

60
smileyborg

objc.io の優れた Advanced Auto Layout Toolboxの記事 から引用:

本質的なコンテンツサイズ

固有のコンテンツサイズとは、表示する特定のコンテンツに対してビューが希望するサイズです。たとえば、UILabelには、フォントに基づいて優先される高さがあり、フォントと表示されるテキストに基づいて優先される幅があります。 UIProgressViewには、アートワークに基づいた優先高さのみがあり、優先幅はありません。プレーンなUIViewには、優先幅も優先高もありません。

耐圧縮性と内容物のハグ

各ビューには、両方のディメンションに割り当てられたコンテンツ圧縮耐性優先度とコンテンツハグ優先度があります。これらのプロパティは、固有のコンテンツサイズを定義するビューに対してのみ有効です。そうでない場合、圧縮に抵抗したり抱きしめられたりする可能性のあるコンテンツサイズは定義されていません。

舞台裏では、固有のコンテンツサイズとこれらの優先度の値が制約に変換されます。固有のコンテンツサイズ{100、30}、水平/垂直圧縮抵抗優先度750、および水平/垂直コンテンツハグ優先度250のラベルの場合、4つの制約が生成されます。

H:[label(<=100@250)] 
H:[label(>=100@750)]
V:[label(<=30@250)]
V:[label(>=30@750)]

上記で使用した制約の視覚形式言語に慣れていない場合は、Appleのドキュメントでそれを読むことができます。これらの追加の制約が暗黙的に生成されることを念頭に置いておくと、自動レイアウトの動作を理解し、エラーメッセージをよりよく理解するのに役立ちます。

ここに、コンテンツの圧縮耐性とコンテンツのハグの違いに対処する別のStackOverflowの質問があります: Cocoa Autolayout:コンテンツのハグとコンテンツの圧縮耐性の優先順位

95
smileyborg