iOS

iPhone X系でホーム画面に行く動作をブロックする方法

iOS見出し

iPhone X系のフルスクリーン液晶の端末ではホームボタンが無くなりました。

代わりに導入されたのが、画面下に鎮座する白かったり黒かったりする横棒。
正式名称は「ホームインジゲーター (home indicator)」

画面の真下から上にスワイプするだけで簡単にホーム画面に移動できてとても便利なのですが、ゲームアプリなどで上にスワイプする操作がある場合、予期せぬホーム画面移動でストレスを招きますよね。

そこで、このホーム画面移動の操作をブロックする方法を紹介します。

とても簡単で、ブロックしたい画面のUIViewControllerでpreferredScreenEdgesDeferringSystemGesturesメソッドをオーバーライドして、UIRectEdge.bottomを返せば「最初の一回だけ」ホーム画面に移動する動作をブロックできます。

override func preferredScreenEdgesDeferringSystemGestures() -> UIRectEdge {
    return .bottom
}

連続で上スワイプをした場合は2回目のスワイプでホーム画面に行ってしまいます。。

ホームボタンのあるiPhone X系以外の端末では、コントロールセンターが出てくる動作をブロックしてくれます。一回だけ。

上から下にスライドした時に出てくる通知センターもブロックしたい場合は | で繋いで書きます。
(間違って || と書かないように!(軽くハマッタ))

override func preferredScreenEdgesDeferringSystemGestures() -> UIRectEdge {
    return .bottom | .top
}

 

この時、オシャレにするために、ホームインジケーターの表示を消すprefersHomeIndicatorAutoHiddenもオーバーライドしていた場合、上記のブロックが効かなくなるので注意してください。
(ちょっとハマった)

override func prefersHomeIndicatorAutoHidden() -> Bool {
    return true
}