Firebaseに最近追加されたIn-App Messagingをドキュメント見ながらアプリに導入していざモーダルビューを表示させたら、何故か表示位置がずれた。
発生原因
Firebaseがポップアップを表示する時に、表示位置をAppDelegateクラスのwindowパラメータから前面のウィンドウサイズを取得して、そこから表示位置を決めているようです。
FIDRenderingWindowHelper.m
+ (UIWindow *)UIWindowForModalView {
static UIWindow *UIWindowForModal;
....
dispatch_once(&onceToken, ^{
UIWindow *appWindow = [[[UIApplication sharedApplication] delegate] window];
UIWindowForModal = [[UIWindow alloc] initWithFrame:[appWindow frame]];
....
});
return UIWindowForModal;
}
なので、最初に表示する画面をStoryboardのis Initial ViewControllerで設定せずUIWindowのrootViewControllerに直接セットしているようなアプリでは、UIViewControllerがセットされない限りウィンドウサイズがゼロなので、正しい位置に表示されなくなるみたいです。
対処法
空のUIViewControllerを設定したUIWindowをAppDelegateのwindowパラメータにセットしてからFirebaseApp.config()
することで解決
AppDelegate.swift
let window = UIWindow(frame: UIScreen.main.bounds)
window.makeKeyAndVisible()
let blankVC = UIViewController()
window.rootViewController = blankVC
self.window = window
......
FirebaseApp.config()