こんにちは、オフィス狛 モバイル開発担当 Aika-yuy です。
今回の投稿は、 StackViewにつけるAutoLayoutの優先度について書いてみたいと思います。
サイズが曖昧だと怒られる
動的なサイズ変更や、デバイスサイズにも柔軟に対応してくれるStackViewですが、サイズが曖昧だと怒られることがあります。固定サイズを指定するという方法もありますが、iPad対応で文字のサイズを動的に変更したい場合は、あらかじめ優先度を設定しましょう。
まず、StackViewに2つのLabelを配置し、StackViewのサイド20、Y軸の中心になるように制約をつけます。そうすると、こんなエラーが出ます。
Add missing constraints for "Stack View"? This will add enough constraints to resolve the ambiguity
こまちゃんのLabelの優先度を低くするようにアドバイスしてくれています。
優先度を指定する
優先度を変更するときはAutoLayoutで設定できます。
優先度は、高くしたい方のpriorityを高くするのではなく、低くしたい方のpriorityを低くするようです。
いろんな解釈の仕方があると思いますが、私が覚えやすい方法使い分けをで書いてみました。
・Content Hugging Priority・・・・・・・・・・ 子Viewが親Viewより小さい時
・Content Compression Resistance Priority・・・ 子Viewが親Viewより大きい時
子Viewが小さい時
2つのLabelどちらともの文章が短い時、どちらのサイズを大きくしてViewいっぱいに表示するかを指定しなければいけません。
その場合は、優先順位が低い方の(固有のサイズを保持しなくてもいい方、大きくなってもいい方)
Content Hugging Priorityを1小さく設定します。
こまちゃんのLabelのContent Hugging Priorityを下げることにより、長くなってしまった場合省略表示され、nameのラベルを親Viewから押し出すこともなくなります。
子Viewのどちらかが大きい時
2つのLabel合わせたサイズが親Viewよりも大きくなってしまう場合、どちらを優先して表示するか指定します。
省略して表示してもいい方の優先度を1小さくします。
子Viewどちらとも親Viewより大きい時(どちらかを優先すると、どちらかが消えてしまう場合)
この場合は、設定次第ですがどちらも表示したい場合は親のStackViewの比率から固定サイズで指定した方がいいかもしれません。
AutoLayoutマスターになるべく、少しづつブログも更新していけるよう頑張ります。
ios , Xcode
0 件のコメント:
コメントを投稿