2016/7/8追記: 現在なら、UIStackView(iOS9.0未満の場合は、FDStackView)を使えばとても簡単に実現できます。
UIStackViewなら、非表示時にアニメーションをすることも簡単にできます。
Problem
- 表示/非表示を切り替えられるViewがあり、非表示にしたときは空間を開けないように位置を縦詰めしたい。
Solution
- Viewを非表示にするときはAutoLayoutのHeightの制約の高さを0にし、表示するときは高さを元に戻すように実装します。
実装例
@IBOutlet weak var label: UILabel!
@IBOutlet weak var labelHeightConstraint: NSLayoutConstraint! // Storyboardのlabelのheightの制約と関連づける
// 表示/非表示を切り替え
func setVisible(visible: Bool) {
if visible {
label.hidden = false
labelHeightConstraint.constant = 44
} else {
label.hidden = true
labelHeightConstraint.constant = 0
}
}