質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.00%

  • Swift

    6097questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • iOS

    3470questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

  • iPhone

    868questions

    iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

iPhoneX(シミュレータ)で、広告表示がずれてしまう

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 824

bizkit.kit

score 20

リリース済みのアプリをiOS11に対応しようとしています。

シミュレータにiPhoneXがあったので動かしてみたのですが、広告表示がズレてしまいました。
iPhoneX以外の機種で動かすとこのようになるのですが、
イメージ説明

iPhoneXで動かすと、このようになります。
イメージ説明

画面上にはUITableViewとその下にUIToolBarを配置してあり、広告は画面最下部に表示するのですが、
UIToolBarがある画面は、広告表示時に広告表示位置のy座標からUIToolBarの高さを引く、という単純な処理です。

iPhoneXだとUIToolBarプラス何かがあるようで、少しだけボタンが隠れてしまいます。
適当に値をマイナスしようかなと思ったのですが、それだとiPhoneX以外の機種でズレてしまいます。

UIDeviceを使って機種名で場合分けしようかなと思ったのですが、シミュレータではうまく値が取れないみたいでうまくいきませんでした。

どのように対応するのがよいでしょうか。
(実機の発売を待って購入した方がいいのかもしれませんが。。。)

以上、よろしくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

結論から言うと、iOS11からUIViewに新しく増えたsafeAreaInsetsプロパティを使用するといいです。
下に開いている余白は、OSの互換性も考慮すると以下のように書けます。

var sideInsets: UIEdgeInsets {
  if #available(iOS 11.0, *) {
    return view.safeAreaInsets
  } else {
    // iOS10以下の端末では一定
    return UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0)
  }
}

safeAreaInsets.bottom // UIToolBar下部の空白の高さ

-- 以下、より詳細な説明です --

iOS11からSafeAreaという概念が加わったのですが、UIKitの一部のクラスではデフォルトでSafeAreaに収まるような挙動をします。(UIToolBarもこれにより下からマージンがあいた位置に配置されていると思われます。)
そのため、画面端からの位置を手動計算するコードを入れている場合だとレイアウト崩れが予想されます。

Safe Areaは、Storyboardでもコード上でも柔軟に扱えるので便利です。
このあたりの話は、以下の記事が役立ちます。
https://qiita.com/eimei4coding/items/5a0794cf7cd13c82b2b5
https://qiita.com/lovee/items/21131fb441a1a86b45e3

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/01 11:46

    ありがとうございます!
    うまくいきました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 91.00%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    xcodeでの画面サイズ変更方法

    swiftでサンプルコードを写しているのですが、参考書を今まで放置してたのでxcodeのバージョンが違うので画面サイズ変更の方法がわからないです。 simulatorでの表示画面

  • 解決済

    Blender Game Engineでマテリアルを透過したい

    Blenderでゲーム開発をしようとしているものです。 Blender Renderで透過処理したマテリアルをBlender Gameに反映させたいと思っているのですが、透過でき

  • 解決済

    UIScrollViewのStoryboards上でのY座標がおかしい

    UIScrollViewの設定値が、どうしても最上部がマイナス値になってしまいます。 contentOffsetの値を、実行中に y:-56 とかにするとうまく表示されるので

  • 解決済

    ACCESS クエリでの一部重複?の除外方法について

    前提・実現したいこと こんにちは、質問タイトルが適格でないかもしれませんが宜しくお願いいたします。 通販事業をしており、商品の仕入から販売までのデータベースをACCESSの

  • 解決済

    背景色の有無と::

    左上の図でleftの右とrightの右の水色が表示されません。特にエラーもありません。 宜しくお願い致します。 リンク内容 <!DOCTYPE html> <

  • 受付中

    ER図について

    つぶやきアプリを作っているのですが、 ER図を作るとする例えばどんなものがありますか?? サンプル程度でいいので教えていただきたいです

  • 解決済

    pycharmのpython console部分の色の変更

    プログラムには関係ないんですが・・・ 長時間PCの画面を見てると目が疲れてしまうので、色を変えてみようと思って 色を変更してみたのですが、python consoleの部分の色

  • 解決済

    ASUS ZenPadで、Camera2APIで、1分動画を2時間分撮影したいです。

    Nexsus 5Xでは、1分動画を、2時間ぶん、撮影することができました。 しかし、ZenPadでは、エラーが出ます。 このようなエラーが繰り返して表示されます。 参

同じタグがついた質問を見る

  • Swift

    6097questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • iOS

    3470questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

  • iPhone

    868questions

    iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。