<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=707545302639771&ev=PageView&noscript=1" />
This page is intended for users in Japan(Japanese). Go to the page for users in Japan(English).

iOSアプリのiPhoneX対応メモ

概要

  • safeAreaにタップできるボタン等を置かない
  • iPhoneXに合わせて見た目を調整する

SafeAreaとは

iPhoneXの場合は

  • フロントカメラとかぶっている部分(Top:34pt)、
  • 従来のホームボタンっぽい操作とぶつかる部分(Bottom:44px)

をsafeAreaとして、タイトルやボタン等は置かないが背景等は表示するようにします。

SafeAreaの取得(Storyboard/AutoLayout)

Safe Area Relative Marginの項目がデフォルトでOnだと思うので、
そのままLayoutGuideにそって今まで通り作ると対応される。

SafeAreaの取得(コード)

iOS11からUIViewにsafeAreaInsetsメソッドが追加されているので、そこから取得する。

コード上で対応する際の注意点

  • そのViewの位置に応じたSafeAreaInsetsが返ってくる
    • TopのSafeAreaが34ptだとして、Topから15pt離れた位置に置いたViewには34-15=19ptのSafeAreaInsets.topが取得できる
  • addSubviewされる前など、ビューが追加されてない(ViewHierarchyに入っていない)ときはUIEdgeInsets.zeroが返ってくる

困ったこと

static let barHeight = CGFloat(30)

みたいな定数に応じてtableViewのlayoutやConsetInsetsをView追加前に調整している場合に、上手くUIView.safeAreaInsetsを使って調整することができなかった。


暫定的な対応としてUIScreen.main.boundsをつかってiPhoneXかどうか判定して、iPhoneXの場合は考慮するべきinsetsを返すextentionを作って調整した。

class func screenSafeAreaInsets() -> UIEdgeInsets {
let isiPhoneX = UIScreen.main.bounds.size == CGSize(width: 375, height: 812)
return isiPhoneX ? UIEdgeInsets.init(top: 44, left: 0, bottom: 34, right: 0) : .zero
}
//
iPhoneX以外にもSafeAreaInsetsを考慮するべき状況は増えていくと思うので、あくまで暫定的な対応として使ってください。画面回転は考慮していません。

まとめ

iPhoneXの発売が楽しみですね。

Wantedly, Inc.では一緒に働く仲間を募集しています
Anonymous
9fb598fe 1684 4714 94fc 2a3a82b6cbec
38135534 f797 45ba 9124 0d4ce88ad6a4?1508994704
867efbc7 ebd2 49e2 b47c a3522597d0ea?1509069272
7e6908da bccc 47de a3ac 19820f80822f
4 いいね!
Anonymous
9fb598fe 1684 4714 94fc 2a3a82b6cbec
38135534 f797 45ba 9124 0d4ce88ad6a4?1508994704
867efbc7 ebd2 49e2 b47c a3522597d0ea?1509069272
7e6908da bccc 47de a3ac 19820f80822f
4 いいね!
Picture?height=80&width=80
Wantedly, Inc.に遊びに来ませんか?
気軽に遊びに来てください! さらに表示
Picture?height=80&width=80
Wantedly, Inc.に遊びに来ませんか?
気軽に遊びに来てください!
C4987855 2531 4230 acd2 1dabf2d70481
iOSエンジニア

RxSwiftを使ってキレイなストリームを作りたい人Wanted!
他の募集を見る

今週のランキング

ランキングをみる

Page top icon