特定の条件下においてChildViewControllerのSafeAreaが正しい値に設定されない場合があり、レイアウトが崩れることがあったので記録しておきます。
発生した際の前提条件
環境
- Xcode10.1
- iPhoneXシュミレータ(iOS12.1)
Viewヒエラルキー
事象
上記Viewヒエラルキーにおいて、UICollectionViewCell内のChildViewControllerにSafeAreaが正しくない値が設定されることがありました。
初回に画面内に表示されるセルのChildViewControllerにおいては正しい値が設定されており、画面外のセルのChildViewControllerには正しくない以下の値が設定されていました。
- top : 0.0
- left : 0.0
- bottom : 0.0
- right : 0.0
頻度は毎回必ず。
親のUICollectionViewCellのSafeAreaまでは正しい値。
ワークアラウンド
親のViewから正しいSafeAreaを受け渡し、愚直に各Viewのレイアウトに反映させる方法をとりました。
SafeArea関連のAPIを調べてみましたがsetterが存在するのは-[UIViewController additionalSafeAreaInsets]
だけのようでSafeAreaを上書きする用途だと少し扱いづらいですね。
何か他に良い方法があれば教えて欲しいです。