iOS14で戻るボタンのタイトルを空欄にするきちんとした方法

先にまとめ

if #available(iOS 14.0, *) {
  navigationItem.backButtonDisplayMode = .minimal
} else {
  navigationItem.backButtonTitle = " "
}

でOK!

概要

iOS14のアップデートの1つに、

  • ナビゲーションバーの戻るボタンを長押しすると、画面遷移のヒストリーが表示され、いくつか前の画面までいっきに戻ることができる

というのがありますよね。

image

ユーザー目線ではたいへん便利な機能ですが、例えば、デザイン的に「戻るのタイトルを空欄」にしていたりすると、

image

と、この長押し時の戻り先リストも空欄になってしまうなどの問題が出てきます。

iOS13以前の方法

iOS13以前では、例えば、

image

Xcodeで該当画面(戻り先の画面)のNavigation ItemBack Buttonに空白を1つ入れるなどして、戻るのタイトルを消すワークアラウンドがありました。

しかし、これをすると、iOS 14以降では長押し時の戻り先リストがおかしくなってしまうわけです。

iOS14でのきちんとした方法

そのため、まずiOS14ではBack Buttonの設定はいじらないようにしましょう1

そうすると当然、

image

このように戻るボタンのところに画面名が表示されてしまいます。

そのうえで、iOS14から追加されたUINavigationItembackButtonDisplayModeを設定します。

https://developer.apple.com/documentation/uikit/uinavigationitem/3656350-backbuttondisplaymode

戻り先のUIViewControllerで、

if #available(iOS 14.0, *) {
  navigationItem.backButtonDisplayMode = .minimal
} else {
  navigationItem.backButtonTitle = " "
}

navigationItem.backButtonDisplayMode.minimal を設定することで、戻るボタンのタイトルが非表示になります。

image

また、Back Buttonなどもいじっていないため、戻るボタン長押し時の戻り先のリストも、

image

のようにきちんと表示されます。

UINavigationItem.BackButtonDisplayMode

なお、backButtonDisplayMode には以下の3種の値を設定できます。

BackButtonDisplayMode 挙動
default デフォルト値はこれで従来の挙動。具体的には画面のスペースに応じて「前画面のnavigationItem.backButtonTitle」「前画面のtitle」「Back(戻る)」「空欄」の優先順位でいずれかが表示される
generic スペースがあれば「Back(戻る)」を表示、なければ空欄
minimal 常に空欄

例えば、先ほどの画面にgenericを設定した時のサンプルはこちらです。

image


  1. 戻るボタンのタイトルを別のものに差し替えたいときだけ変更する ↩︎