3
1

More than 5 years have passed since last update.

ChildViewControllerのSafeAreaが正しくない場合がある

Posted at

特定の条件下においてChildViewControllerのSafeAreaが正しい値に設定されない場合があり、レイアウトが崩れることがあったので記録しておきます。

発生した際の前提条件

環境

  • Xcode10.1
  • iPhoneXシュミレータ(iOS12.1)

Viewヒエラルキー

  • UIViewController
    • UICollectionView
      • UICollectionViewCell
        • UIViewController qiita-safearea.png

事象

上記Viewヒエラルキーにおいて、UICollectionViewCell内のChildViewControllerにSafeAreaが正しくない値が設定されることがありました。
初回に画面内に表示されるセルのChildViewControllerにおいては正しい値が設定されており、画面外のセルのChildViewControllerには正しくない以下の値が設定されていました。
▿ UIEdgeInsets
- top : 0.0
- left : 0.0
- bottom : 0.0
- right : 0.0

頻度は毎回必ず。
親のUICollectionViewCellのSafeAreaまでは正しい値。

ワークアラウンド

親のViewから正しいSafeAreaを受け渡し、愚直に各Viewのレイアウトに反映させる方法をとりました。
SafeArea関連のAPIを調べてみましたがsetterが存在するのは-[UIViewController additionalSafeAreaInsets]だけのようでSafeAreaを上書きする用途だと少し扱いづらいですね。

何か他に良い方法があれば教えて欲しいです。

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