【Swift】 tableviewとadmobとiPhone11のお話し

Swift

こんちには、フリーのITエンジニアでWeb(PHP:Laravel)のバッグエンドをメインにフルリモートでお仕事させて頂きながら、個人開発でiOSアプリを作っているMoritaです。

個人開発しているアプリのアップデートする際に学んだ知見になります。

どんな問題があったのか?

ホーム画面でtabbar、tableViewを使用して一覧表示をしています。
そこへtabbarの上にadmobを表示していたのですが、tableViewCellに項目を追加していくとadmobと被った項目がタップできなくなりました。

どのように対策したか

admobが表示されるまで時間がかかり固定でadmobの位置を決めるとadmobが表示されるまで空白表示されてしまいます。
可能ならadmobの表示有無によってtableViewのbottom位置を上下させたかったのですが方法が分からず。
諦めてadmobの表示領域を固定にすることにしました。

let rect = CGRect(x: 0, y: 0, width: self.view.bounds.width, height: self.view.bounds.height - AppConst.tabBarHeight - self.admobView.frame.height)
self.tableView = UITableView(frame: rect, style: .plain)

iPhone11だともう少し対応が必要

 iPhone11より前の端末だと問題ないのですが、11以降だと端末下にHome Indicatorが存在するため、その分の高さを調整する必要があります。

let rect = CGRect(x: 0, y: 0, width: self.view.bounds.width, height: self.view.bounds.height - AppConst.tabBarHeight - self.admobView.frame.height - AppConst.safeAreaBottom)
self.tableView = UITableView(frame: rect, style: .plain)

AppConst.safeAreaBottomはUITabBarControllerでsafeエリアのbottomの高さを取得しています。
取得できるイベントが決まっているようです。
自分はホーム画面のTabBarControllerでstatic変数に入れて全体で使い回すようにしています。

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    AppConst.safeAreaBottom = self.view.safeAreaInsets.bottom
}

まとめ

iPhone11は画面構成が変わってしまうので考慮するのが大変ですね。
個人的にはiPhone7 Plus使っているので、Xcodeのシミュレーターが無くなってしまったのでそろそろ買い替え時かなと思います。

コメント

タイトルとURLをコピーしました