iOS14では、UINavigationBarの戻るボタンを長押しすることでスタックされているViewControllerの一覧がメニューとして自動的に表示されるようになります。
iOS13までは戻るボタンを押すと、一つ前の画面にしか戻ることができませんでしたが、この機能により、ユーザーが戻りたい画面を自由に選択することができるようになりました。
メニューに表示されるタイトルは、以下に設定されているタイトルから自動で選ばれます。
.backBarButtonItem.title
.backButtonTitle
.title
何も設定されていない場合、「戻る」がメニューに表示されます。
また現状この機能は無効にすることができませんので、戻るボタンを自作していない限りは必ず表示されます。
既存アプリの対応について
特別な対応をする必要はほとんどありませんが、アプリによってはいくつか確認すべき点がありました。
titleViewを使っていないか?
title
に直接タイトルを設定せず、代わりにtitleView
を使用しているケースがあると思いますが、この場合メニューにタイトルが設定されません(戻るになる)。
WWDCのセッションでは、この場合backButtonTitle
の使用を検討して欲しいと説明されています。
尚backButtonTitle
はiOS11からのプロパティとなるため、iOS10以下をサポートしている場合はbackBarButtonItem
を使用しましょう。
戻れてはいけない画面がメニューに表示されていないか?
少なくとも僕の周りでこのような実装をしているアプリは見たことがないのでレアケースだと思うのですが、いろんな事情で特定の画面に戻れないように実装している場合。
コード的にはhidesBackButton = true
が存在している場合です。
戻るボタンを隠していたとしても、その先の画面で戻るボタンが表示される機会があり尚且つスタックに積まれているとメニューから戻れてしまいます。
その場合はOSが提供する戻るボタンを使用しないか、UINavigationControllerのviewControllers
から直接Viewを取り除くという荒技がありますが、推奨しません。
最後に
上記に当てはまらない場合でもQAは必須です。タイトルがおかしくなっていないか?想定しない画面は入ってないか?この辺りは最低限見たほうが良いです。
画面数が多いと大変ですが、予期せぬ不具合を起こさないためにもやっていきましょう。