【Xcode】Content HuggingPriority と Content Compression Resistence Priority

Content HuggingPriority

Content HuggingPriority は表示コンテンツが小さい時にViewのサイズを小さくする優先度のことです。

たとえば、UIStackView で テキスト数が短めの UILabel を横に2つ並べた場合、このようなエラーがでると思います。(Alignment、Distribution はどちらもデフォルトの Fill のままという前提で進めます)

horizontal hugging priority の値を、UILabel1 を「250」に、または UILabel2 を「252」にしましょう、というエラーメッセージが表示されています。

この数値はデフォルトで「251」に設定されるので、現時点ではどちらも同じ値が設定されていますが、上図のようにテキストの文字数が両方とも短い場合、UIStackView を横いっぱいに表示する(Distribution: Fill)にはどちらかの UILabel を長くする必要があります。上図ではすでに Label1 が長く表示されていますが、Xcode ではどちらも「251」に設定しているので、設定値と表示があってないですよ、と言われているわけです。

horizontal hugging priority は「横幅を小さくする優先度」なので、UILabel1 を「250」にして小さくなりにくくさせるか、UILabel2 を「252」にして小さくなりやすくさせると、上図のように UILabel1 が UILabel2 よりも大きく表示されるようになります。

逆に、UILabel1 を「252」にして小さくなりにくくさせるか、UILabel2 を「250」に設定すると、UILabel2 が UILabel1 よりも大きく表示されるようになります。

Content Compression Resistence Priority

Content Compression Resistence Priority は表示コンテンツが大きい時にViewのサイズを大きくする優先度のことです。

たとえば、UIStackView で テキスト数が長めの UILabel を横に2つ並べた場合、このようなエラーがでると思います。

horizontal compression resistance priority の値を、UILabel1 を「749」に、または UILabel2 を「751」にしましょう、というエラーメッセージが表示されています。

この数値はデフォルトで「750」に設定されるので、現時点ではどちらも同じ値が設定されていますが、上図のようにテキストの文字数が両方とも長い場合、UIStackView を横いっぱいに表示する(Distribution: Fill)にはどちらかの UILabel を短くする必要があります。上図ではすでに Label2 が長く表示されていますが、Xcode ではどちらも「750」に設定しているので、設定値と表示があってないですよ、と言われているわけです。

horizontal compression resistance priority は「横幅を大きくする優先度」なので、UILabel1 を「749」にして大きくなりにくくさせるか、UILabel2 を「751」にして大きくなりやすくさせると、上図のように UILabel2 が UILabel1 よりも大きく表示されるようになります。

逆に、UILabel1 を「751」にして大きくなりやすくさせるか、UILabel2 を「749」に設定すると、UILabel1 が UILabel2 よりも大きく表示されるようになります。