iOS13で仕様が変わるpresentViewControllerに対応する方法
iOS13で仕様が変わるモーダルビューをフルスクリーンで表示させる方法
はじめに
iOS13のベータ版が公開されました。
早速実機にインストールして、開発中のアプリをXCode11ベータ版でビルドして動作確認してみました。
そこで、画面遷移の仕様が変わっていることがわかりました。
解説
具体的にはpresentViewController(セグエも同様でしょう)を使用したモーダルタイプの遷移後に、
前の画面が下に存在することが分かるようなレイヤーチラ見せ方式になっています。
※ナビゲーションのpushの遷移の場合は従来と変わりませんでした。
連絡先アプリの例
これにより、iOS13ではキャンセルボタンを押さずとも
下方向にスワイプすると、今のビューを終了して前の画面に戻ることが可能になりました。
iOS12でも同様の仕様の部分はありました。
例えばミュージックアプリの以下画面です。
下スワイプで前の画面に戻れる点では、すごく便利になりますね。
最近ではAppleはフラットデザイン以降UIのガイドラインに大きな変更はありませんが、UXにはかなり力を入れているようです。
しかしながら、presentViewControllerで遷移後、戻ることを想定しない構成で作られていた既存アプリは、2019年秋以降のアップデート時には修正が必要になりそうです。
強制的に従来の仕様にする方法
既存アプリにおいて、前の画面に戻ることができると困ってしまうケースがあると思います。
その場合には、以下のコードで強制的にフルスクリーンにして、スワイプで閉じることができないようにすることができます。
■Swift
let viewController = UIViewController()
viewController.modalPresentationStyle = .fullScreen;
present(viewController, animated: false, completion: nil)
■Objective-C
UIViewController *viewController = [[UIViewController alloc] init];
[viewController setModalPresentationStyle:UIModalPresentationFullScreen];
[self presentViewController:vc animated:YES completion:nil];
viewController.modalPresentationStyle = UIModalPresentationFullScreen;
でも可能です。
iOS13での仕様変更は、その他にもあるようでしたのでそれは別途紹介できればと思います。
・セグメントなどパーツの見た目の変更
・ダークモードによる背景色・テキストカラーへの影響など