iPhoneアプリ開発

【Swift】StackView内のViewにコードからsetContentHuggingPriority,setContentCompressionResistancePriorityを指定

StackViewの「distribution」に「Fill」を指定する場合、配置する各 viewは自動で高さ、幅が調整されるが、このためにview同士が重なって見えなくなる現象が発生する。

それを解決するのが以下参考サイトにも記載のある「Hugging Priority」と「Compression Resistance Priority」という項目だが、Swiftからコーディングで設定する方法が見つからないので苦労した。

 

Swiftからコーディングで指定する方法は以下となる。

iconView.setContentHuggingPriority(60, forAxis: UILayoutConstraintAxis.Vertical)
iconView.setContentHuggingPriority(60, forAxis: UILayoutConstraintAxis.Horizontal)
iconView.setContentCompressionResistancePriority(60, forAxis: UILayoutConstraintAxis.Vertical)
iconView.setContentCompressionResistancePriority(60, forAxis: UILayoutConstraintAxis.Horizontal)

 

setContentHuggingPriority:拡大限界値

setContentCompressionResistancePriority:縮小限界値

 

setContentHuggingPriority」と「setContentCompressionResistancePriority」でそれぞれ指定する。

上記では拡大、縮小ともに縦・横60pxで固定する例。

引数は、どちらも第1引数が指定する値、第2引数が軸方向となる。

Stackviewに含めると画像サイズが変わってしまうViewに指定すると、うまく制御できるようになる。