【Swift4】縦長のスクロール画面をscrollViewとstackViewを使って作ると便利だった。

追記〜〜
Xcoceの仕様が変わったので改訂版書きました。
【Swift5】縦長のスクロール画面をscrollViewとstackViewを使って作ると便利だった。改訂版 | iPhoneアプリ備忘録
〜〜〜〜

設定画面とか縦長でスクロールする画面を作りたい時ってあるじゃないですか。
でもテーブルビュー使うのめんどくさいな、みたいな。
そんなときに便利なやり方です。

一応の完成形はこんな感じ。
zuhqs-9xva4

参考サイト
制約の修正なしで縦方向に要素を追加可能なビューの作成 – Qiita
【iOS】ちょっと待って!その画面UITableViewで作る必要ないかも – ペンギン村 Tech Blog
【UIScrollView】Autolayoutで縦スクロール【Xcode8.x】 – Qiita

ではまず、Safe AreaにScroll Viewを配置します。
Add New Constraintsで上下左右全てのマージンを0とします。
スクリーンショット 2019-01-06 20.41.39

次いで、その中にVertical Stack Viewを配置し、Scroll Viewと同様に、Add New Constraintsで上下左右全てのマージンを0とします。
スクリーンショット 2019-01-06 20.42.11

このままではScroll Viewのコンテントサイズの制約がないためエラーがでます。
スクリーンショット 2019-01-06 20.42.36

マウスの右ボタンでStack ViewからScroll ViewへドラッグしてEqual Widthで横幅を揃える制限をつけます。
スクリーンショット 2019-01-06 20.45.30(2)

Stack Viewの子コンテンツでScroll Viewの高さが決まります。
とりあえずStack ViewのDistributionをEqual SpacingにしてSpacingを0にします。
スクリーンショット 2019-01-06 20.47.18

子コンテンツを入れて高さが決まるとScroll Viewの高さが決まります。
スクリーンショット 2019-01-06 20.49.28

2019年1月22日追記〜〜
このままだと上下の高さがSafe Areaの分ずれるので、Scroll Viewの上下の対象をSafe AreaからSuperviewに変えます。
スクリーンショット 2019-01-22 13.21.40
↓対象をSuperviewに変えて
スクリーンショット 2019-01-22 13.22.02
↓マージンを0にします。
スクリーンショット 2019-01-22 13.24.48
↓上も下もね。
スクリーンショット 2019-01-22 13.25.04
これで上下のズレがなくなります。
追記終わり〜〜
 
 

さて、ここから縦長な画面にします。
操作するViewを選んで、simulated sizeを「freeform」にして、heightを設定します。
とりあえず1200にしてみました。
スクリーンショット 2019-01-06 20.51.30

StackViewに高さが200の子Viewを6個入れて分かりやすように色を付けてみました。
スクリーンショット 2019-01-06 21.04.34

これでアプリを起動すると綺麗にスクロールしました。\(^o^)/
zuhqs-9xva4

これだけのことがコードを一行も書かずにできるってすごいなーと思います。\(^o^)/

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です