scrollViewをAutoLayoutとなるべく少ないコードで設定する例
なるべくstoryboard上でscroll viewとそこでスクロールするviewオブジェクトを設定するがviewに表示する内容はコードで作成する(自分の場合は表をコードで描く)。
なのでデバイスや表示する内容次第でviewオブジェクトの高さは変わるが、このような場合にAutoLayoutなどの指定はどうしたらいいのか?
自分の中では納得できる最小実装がこんなの。
scroll view(UIScrollViewオブジェクト)はstoryboardで好きに設定したらOK。これはええねん。問題は中身や。
実際に縦にスクロールするview(UIViewオブジェクト)をここではcontentViewとしておく。これをどうするか?だ。
まずstoryboard上ではscroll viewにcontentViewを乗せる。

↑Xcodeで見ると構成はこんなになってる。
ありがたいこと乗せるだけでこのviewがスクロールするビューだと認識してくれる。特にこれだよ!ってview controllerなんかで指定してやる必要もない。感心するわ。
問題のcontentViewのconstraintsだけど、、、

↑これだけ。Superviewはもちろんscroll viewのこと。
・scroll viewとの上下左右はゼロですよって指定(A)
・横幅同じ
・高さは適当な数字
としている。(A)が感覚的に納得できないがそうするものだとXcodeが教えてくれた。

↑高さを指定したconstraintを選択し、

↑通常通りここからNew Referencing Outletをにゅーっとドラッグして接続すればOK。constraintについてもこんな風に参照をコードに持ってこれるって最近知りました!
コード内でviewに乗せる内容を記述したとして、、、その一番下のy座標がわかったら、
この記述はviewDidLoadでOK。
これでiPhone 5sでもXS Maxでも意図通りに表示されました。
(個人的にはあまり使いたくない)viewDidLayoutSubviewsを使う必要もなし☺️
なのでデバイスや表示する内容次第でviewオブジェクトの高さは変わるが、このような場合にAutoLayoutなどの指定はどうしたらいいのか?
自分の中では納得できる最小実装がこんなの。
scroll view(UIScrollViewオブジェクト)はstoryboardで好きに設定したらOK。これはええねん。問題は中身や。
実際に縦にスクロールするview(UIViewオブジェクト)をここではcontentViewとしておく。これをどうするか?だ。
まずstoryboard上ではscroll viewにcontentViewを乗せる。

↑Xcodeで見ると構成はこんなになってる。
ありがたいこと乗せるだけでこのviewがスクロールするビューだと認識してくれる。特にこれだよ!ってview controllerなんかで指定してやる必要もない。感心するわ。
問題のcontentViewのconstraintsだけど、、、

↑これだけ。Superviewはもちろんscroll viewのこと。
・scroll viewとの上下左右はゼロですよって指定(A)
・横幅同じ
・高さは適当な数字
としている。(A)が感覚的に納得できないがそうするものだとXcodeが教えてくれた。
IBOutlet NSLayoutConstraint *contentViewHeightConstraint;↑view controllerでこのようなconstraintに関係するoutletを用意しといて先ほどの適当な数字を指定したのと接続する。つまり、

↑高さを指定したconstraintを選択し、

↑通常通りここからNew Referencing Outletをにゅーっとドラッグして接続すればOK。constraintについてもこんな風に参照をコードに持ってこれるって最近知りました!
コード内でviewに乗せる内容を記述したとして、、、その一番下のy座標がわかったら、
contentViewHeightConstraint.constant = label2.bottom;↑このようにその値を入れてやればよい。
この記述はviewDidLoadでOK。
これでiPhone 5sでもXS Maxでも意図通りに表示されました。
(個人的にはあまり使いたくない)viewDidLayoutSubviewsを使う必要もなし☺️
スポンサーサイト
<< 申請時にXcodeでアップロードしたはずのファイルがApp Store Connectで反映されない TopPage タブごとにstoryboardファイルを分ける >>
トラックバック
トラックバックURL
https://ringsbell.blog.fc2.com/tb.php/1311-612135b7
https://ringsbell.blog.fc2.com/tb.php/1311-612135b7