頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


scrollViewをAutoLayoutとなるべく少ないコードで設定する例

なるべくstoryboard上でscroll viewとそこでスクロールするviewオブジェクトを設定するがviewに表示する内容はコードで作成する(自分の場合は表をコードで描く)。
なのでデバイスや表示する内容次第でviewオブジェクトの高さは変わるが、このような場合にAutoLayoutなどの指定はどうしたらいいのか?

自分の中では納得できる最小実装がこんなの。

scroll view(UIScrollViewオブジェクト)はstoryboardで好きに設定したらOK。これはええねん。問題は中身や。
実際に縦にスクロールするview(UIViewオブジェクト)をここではcontentViewとしておく。これをどうするか?だ。

まずstoryboard上ではscroll viewにcontentViewを乗せる。

Xcodeでのファイル構成1

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

問題のcontentViewのconstraintsだけど、、、

contentViewに設定するconstraints

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

IBOutlet NSLayoutConstraint *contentViewHeightConstraint;
↑view controllerでこのようなconstraintに関係するoutletを用意しといて先ほどの適当な数字を指定したのと接続する。つまり、

Xcodeでのファイル構成2

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

outlet設定画面

↑通常通りここから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




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.