69
57

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 3 years have passed since last update.

[Xcode11] UIScrollViewとAutolayoutのベストプラクティス

Last updated at Posted at 2020-01-06

UIScrollViewでよくつまずいてたけど、うまくできるようになったのでシェアします。
##はじめに
みなさんはScrollViewは使ってますか?
おそらくほとんどのアプリで使われていると思います。
しかし、

ScrollViewでAuto layoutで並べるのはApple開発者でも難しい

ということらしいのです(引用元)。

Apple開発者というのはAppleで働いているエンジニアの方なのか、Appleデバイス用のアプリのデベロッパーなのかわかりませんが(おそらく前者だとは思いますが)、結構複雑で久しぶりにやると忘れてしまうし、Xcode 11になってやり方が変わったのでここに残しておきますね。

ここではScrollViewにContainerViewを入れて、視覚的にわかりやすくデザインを組めるようなやり方を説明します。

あとこの文章はStoryboardとAutolayoutユーザー向けです。

間違ってるところがあったら指摘してくれるとありがたいです🙇‍♂️スクリーンショット 2020-01-06 22.18.06.png

##開発環境
Xcode11
Swift 5
iOS 11+ (←これ重要です!理由は後述します)

##やり方
###1
ViewControllerの適当な場所にScrollViewを配置し、Autolayoutで制約を設定する。
スクリーンショット 2020-01-06 22.03.16.png

###2
するとこのように赤く警告されてしまいます。
スクリーンショット 2020-01-06 22.03.54.png

###3
理由を見てみると、
"Has ambiguous scrollable content height and width"
つまり、「スクロール可能なコンテンツの高さと幅があいまい」ということです。
スクリーンショット 2020-01-06 22.04.27.png

###4
とりあえずこのエラーは無視しますw
そして、ScrollViewの中にContainerViewを配置します。
この時ScrollViewとContainerViewが親子関係となっていることを確認してください。
スクリーンショット 2020-01-06 22.18.23.png

###5
このScrollViewのContent Layout GuideとContainerViewをコマンドキー⌘を使って選択したあと、AutolayoutのAlignを使って上下左右を固定します。
スクリーンショット 2020-01-06 22.26.09.png

###6
そして、Container Viewから副クリックもしくはcontrolキーを押しながらFrame Layout Guideに青い線を伸ばし、Equal Widthsを選択します。
スクリーンショット 2020-01-06 22.27.48.png

###7
最後にContainerViewの高さを設定し、ScrollViewは終わりです!
スクリーンショット 2020-01-06 22.31.29.png

###8
あとはContainer Viewに接続されたViewにUI部品を配置するだけです。
スクリーンショット 2020-01-06 22.51.49.png

##iOS 10以下はこれが使えない理由
実はContent Layout GuideとFrame Layout GuideはiOS 11から使えるようになっていたけれどしばらくStoryboard上では使えず、やっとXcode 11でStoryboard上で使えるようになったのです。正直iOS 11以上はiOSユーザーの9割が使っているのでiOS 10以下はメンテナンスの費用を考えるとサポートを切った方が良いと思うのですが、業務などでiOS 10以下もサポートしないといけない場合は以下のサイトを見てみてください。

Xcode11のIBに追加されたContentLayoutGuideとFrameLayoutGuideについて iOS10位かもサポートしたいんだけど。。。

##最後に
お疲れ様でした!
これでうまくScrollViewを設定できたでしょうか。
少しめんどくさいのでXcodeのアプデでもっと楽にできるようになることを期待します。

この記事を読んでScrollViewをうまく設定できた方は、良ければいいね👍お願いします!

最後までお読みいただきありがとうございました😊

69
57
1

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
69
57

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?