・WEB便利ツール・ポートフォリオCLOSEキーワードで記事を検索CLOSEiOSアプリ作ってます。monkey)アプリ開発でiPhoneX対応したけど、SafeAreaの扱いが重要みたいツイートシェアはてブLINEPocketiPhoneXが発売されて数日経ちましたが、僕のアプリもようやくiPhoneXに対応しました。iPhoneX対応って具体的に何をすればいいのか?っていうは、Appleデベロッパーのガイドラインとか、Quiitaさんとかの記事とかを参考にすれば、だいたい問題ないかと思います。対応についてUIScrollViewでcontentInsetAdjustmentBehaviorというプロパティが増えている。デフォルトだとautomaticが設定されており、contentInsetに自動で良い感じの値をセットしてくれるが、これが鬱陶しい場合はneverにセットする。marginが考慮されたりされなかったりする。areaを取得する場合は、UIViewのsafeAreaInstesプロパティを使う。これはviewの配置箇所に対して相対的に取られるもので、viewWillLayoutSubviews以降のライフサイクルで取れる。Areasにちゃんと対応すれば、とりあえずはiPhoneX対応はしたことになると思ってます。X僕は、現時点では、iPhoneXをゲットできていない状況なので、iPhoneXを入手する前に行うiPhoneX対応としては、以下の対応を行いました。・アプリでレイアウトが崩れていないかチェック・iPhoneXのSafeAreaに収まっているかのチェック・全体的な機能チェックXcode9.0のiPhoneXシミュレーターで確認できるところはチェックしましたが、カメラ撮影部分など、iPhoneのハード寄りな部分はチェックできないので、iPhoneXをゲットしたらチェックする予定。iPhoneXのシミュレーターで見た感じ、全体的な機能は問題なく動きそうだけどiPhoneXのシミュレーターでチェックした感じでは、画面のアスペクト比が変わってしまったので、画面によりボタンが伸びちゃっている箇所があったりしましたが、基本的な機能などは問題なさそうでした。SafeAreaの対応だけは、それなりに時間がかかってしまいました。僕のアプリでは、広告を表示させているんですが、その広告が、SafeArea外にはみ出て、iPhoneXの下の黒いバーにかかっている状態になってしまっていました。気合を入れて対応することに。Layoutで組んでいない僕は、別の方法を探してみることに。Layout使ってないんです。理解に時間がかかりそうなんで。)とりあえず、ドキュメントをみる限り、ビューのsafeAreaInsetsの値が、iPhoneXの場合、変化するってことはわかったんで、やり方としては、safeAreaInsetsを取得して、その座標の上に広告を表示すれば、iPhoneXでも正常に広告が表示できるのかなと思いました。safeAreaをコードで取得する方法で、調べた結果たどり着いたのが、Appleのドキュメントです。newSafeArea}上の例だと、viewDidAppearのタイミングで、safeInsetsを取得して、差分をviewcontrollerのsafeInsets追加してます。この方法を元に、行った方法が以下です。bannerView.frame.height)}safeAreaInsetsの値は、iOS11以上じゃないと取得できないらしいので、iOSバージョンにより条件分岐してます。viewControllerのviewのsafeAreaInsets.bottomを取得して、その上にAdMobのバナービューを設置すれば、iPhoneXでAdMobのバナーがコードで設置できると思います。同じようなことで悩んでいる人がいたら試してみてください。(新しいウィンドウで開きます)関連Apple・アプリ開発・SE・リジェクトAppleiOSiOS11iPhoneiPhone8iPhoneXXcodeアプリアプリ開発問題この記事が気に入ったらいいねしよう!最新記事をお届けします。コメントをキャンセルメールアドレスが公開されることはありません。新しい投稿をメールで受け取るiPhoneX対応でSafeAreaInsetsが取得できない場合の解決法iPhoneXでGPS不具合?アプリではなく端末側?GPSが正常に反映されない不具合RECOMMENDこちらの記事も人気です。Securityのエラーでhttpアクセスで...Apple・アプリ開発・SE・リジェクト2017.6.21Appleリジェクト問題がついに終焉。monkey)テクノモンキーを運営しているYouheiです。iPhoneの使い方や不具合情報などをまとめる記事を書いてます。