LoginSignup
8
4

More than 5 years have passed since last update.

UIStackViewのArrangedSubViewをisHiddenするときに気をつけること

Posted at

環境

Xcode 10
Swift 4.2
iOS 12

現象

UIStackViewのArrangedSubViewをisHiddenで、表示したり非表示にしたりする場合に対象のSubViewにWidthかHeightのConstraintを設定しているとたまにおかしな表示になる。

下の図でいうと、
1. StackViewのAxisがHorizontalでピンクのViewにWidthのConstraintを設定
2. コード上でピンクのViewにたいしていsHidden=trueをする
3. ピンクのViewが消えることを想定しているが、たまに消えない ← よくわかってないのですが特定の条件が重なると起きます

スクリーンショット 2018-10-01 19.05.19.png

原因

isHidden=trueにした際にピンクのViewの幅が0になるのですが、そのConstraintともともと設定していたWidth=150のConstraintが競合してしまうのが原因です。
どちらもPriorityが1000 なので、どちらが優先されるかはOSが勝手に決める(たしか)。

どうすりゃいいの

ピンクのViewにもともと設定しているWidth=150のConstraintのPriorityを750(High)とかにすればOKです。
750じゃなくてもいいんですが、1000以下で低すぎない値なら999とかでもたぶん大丈夫です。

焦ったPoint

ViewHierarchyを見たときには要素が消えているが、ビルドした画面には要素が表示されており焦りました。
logのwarningを見ていれば焦らなくても済んだのかもしれませんが、warningが出まくっていて見てなかったです。

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4