5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

もちろん俺らは抵抗するで?技術で🤜🤛Advent Calendar 2017

Day 14

UIStackView内のView同士でEqualの制約をつけたらhiddenするときやばい

Last updated at Posted at 2017-12-25

本日2本目のUIStackViewネタです。
1本目→UIStackViewのトルツメで警告が出るのを防ぐ方法

#UIStackViewでhiddenを切り替えてトルツメする時

こんな感じの画面を組みます。
黄色部分がボタンでUIStackViewに内包された赤と青のUIViewのうち、赤のUIViewのhiddenを切り替えることができます。
レイアウト適当な上にセンスなさすぎという声が聞こえてくる気がしますが耳を塞ぎます。
スクリーンショット 2017-12-25 23.47.34.png

条件は赤のUIViewの高さの制約は300、そして青のUIViewとの間に高さのEqualの制約がつけられています。
想定としては、赤のUIViewが非表示になることで、青のUIViewが赤の位置に来るようになることとします。

スクリーンショット 2017-12-25 23.51.56.png

#iOS11の場合
赤のUIViewのhiddenをtrueにすると、青のUIViewが赤の位置に来ます。
スクリーンショット 2017-12-26 0.29.12.png

#iOS10以下の場合
赤のUIViewのhiddenをtrueにすると、青のUIViewも消えてしまいます。
スクリーンショット 2017-12-26 0.29.37.png

#原因
UIStackViewが赤のViewのhiddenを切り替えた際に高さの制約を0にしてしまうためEqualで紐づけられた青のUIViewも高さが0になってしまう。
iOS11の場合は、その辺り賢くなっててhiddenになる前の高さでViewの高さを計算してくれるので、何も考えなくていい。

#解決策
青のUIViewの高さの制約に赤のUIViewの高さの制約と同じ値を設定する。
そうすることで、Equalの制約を使わないためiOS10以下とiOS11で共通の動きを実現できる。
しかしEqualが設定できなくなるので不便

5
1
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
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?