LoginSignup
6
1

More than 5 years have passed since last update.

UIPageViewControllerをUITableViewCellに乗せるときにハマった話

Last updated at Posted at 2018-12-09

先日、とあるアプリで、UIPageViewControllerをUITableViewCell上に乗せて表示してみたところ、少しハマるポイントがあったので、それを紹介します。(そもそもそんなことする必要ある?みたいな話は一旦置いておいていただけるとありがたいです。)

サンプル

以下の画像のようなセル上にUIPageViewControllerを表示させるレイアウトを作成しました。
グレーの部分がUIPageViewControllerで、ページのViewController内のボタンをタップすると次の画面にプッシュで遷移するといった実装になっています。
Simulator Screen Shot - iPhone 7 - 2018-12-09 at 13.29.37.png

少しスクロールした状態で、遷移した後に、この画面に再び戻ってくると、UIPageViewControllerの位置が下にずれて、UIPageViewControllerのviewをaddSubviewしたViewの背景色である緑色が出てきてしまいます。
Simulator Screen Shot - iPhone 7 - 2018-12-09 at 13.37.28.png

これは、iOS11やiOS12では起こらず、iOS10でのみ起こる問題です。

原因

UIPageViewControllerの中に表示するUIViewControllerのViewがSafeAreaに対してレイアウトを指定していため、レイアウトの崩れが起こっていました。

スクリーンショット 2018-12-09 13.43.04.png

どういうことが起こっていたかというと、SafeArea対してレイアウトを設定していたため、スクロールされていない状態だと、UIPageViewControllerはSafeArea上にかぶらないので、うまく動作しますが、スクロールした後に画面遷移などをしてAutoLayoutが再レイアウトが行われると、スクロールしたことによってUIPageViewControllerがSafeArea上にかぶっているので、それに合わせて中のViewControllerが再配置してずれるというわけですね。

解決法

Superviewに対して制約をつければ、スクロールしてSafeAreaに被っても、関係なくレイアウトされるようになるので、それで修正できました。
スクリーンショット 2018-12-09 13.48.03.png

6
1
0

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
6
1