iPhone6,6Plus サポートとか LaunchScreen.xib とか Size Class とか考えると、もはや Autolayout は必須な感じになってきてます。
で、Autolayout ✕ UIScrollView の例の問題(UIScrollView のサイズを superview との制約で動的に変えるときにその中身も動的に変えたい、ってやつ。こんな雑な説明でもハマったことある人にはわかっていただけるかと・・・)、Apple 公式でこんなドキュメントが出てますが、
"Mixed Approach" とかなんか筋が悪い感じだし、"Pure Auto Layout Approach" とかサンプル見ると Constraint を例のビジュアルなんとかで書いてて正直どっちも真似したくない感。。Xcode 5 時代のドキュメントでちょっと古いし。。
StackOverflow でもあんまりピンとくる回答は見つからないし、UIScrollView はなるべく使わず、ページング的なやつは UIPageViewController とか UITableView とか UICollectionView でやろうみたいな話も見かけました。
もっとストンと腹落ちする解決法ないのかなーと思ってたところに、友人の開発者からこんな記事を教えてもらいました。
Apple エンジニア直伝のシンプルな解決法
WWDC で Apple のエンジニアにやらせてみたところ40分かかったそうです笑
で、その一番のポイントがこれ。
UIScrollView の中身のビューに対して、「幅 or 高さの基準にする view について "Equal Widths" or "Equal Heights" となる制約をセットする」というものです。
すごくシンプルな上に、納得感もあります。
やってみた
UIScrollView 直下のビューが
- 複数ある
- 幅ピッタリじゃない(space 0 じゃない)
場合も、以下のようにそれぞれ Equal Widths 設定すると、
バッチリ意図通りに、幅は縮小されて、高さ方向はスクロールするようになりました。