【iOS】iOS13でpresentViewControllerでの遷移はひとくせあり
notwork_ios13_present
スポンサーリンク

iOS13で仕様が変わるpresentViewControllerに対応する方法

iOS13で仕様が変わるモーダルビューをフルスクリーンで表示させる方法

ヒーラー
デフォルトのままだと前の画面に戻れるようになるため、既存アプリでは対応が必要な場合が多そう

はじめに

iOS13のベータ版が公開されました。
早速実機にインストールして、開発中のアプリをXCode11ベータ版でビルドして動作確認してみました。
そこで、画面遷移の仕様が変わっていることがわかりました。

解説

具体的にはpresentViewController(セグエも同様でしょう)を使用したモーダルタイプの遷移後に、
前の画面が下に存在することが分かるようなレイヤーチラ見せ方式になっています。
※ナビゲーションのpushの遷移の場合は従来と変わりませんでした。

連絡先アプリの例

iOS13.PNG
iOS13
iOS12.PNG
iOS12

これにより、iOS13ではキャンセルボタンを押さずとも
下方向にスワイプすると、今のビューを終了して前の画面に戻ることが可能になりました。

iOS12でも同様の仕様の部分はありました。
例えばミュージックアプリの以下画面です。

iOS12_Music.PNG
iOS12 Musicアプリ

下スワイプで前の画面に戻れる点では、すごく便利になりますね。
最近では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での仕様変更は、その他にもあるようでしたのでそれは別途紹介できればと思います。
・セグメントなどパーツの見た目の変更
・ダークモードによる背景色・テキストカラーへの影響など


スポンサーリンク

Twitterでフォローしよう

おすすめの記事