4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【SwiftUI】NavigationBar の戻るボタンのテキストを消す

Last updated at Posted at 2021-11-26

やりたいこと

以下のように、戻るボタンからテキスト部分だけを無くしたい。
Before - After
スクリーンショット 2021-11-27 0.41.20.png

実装

navigationBarBackButtonHidden(true) で戻るボタンごと削除する。
そして代わりに toolbar で、アイコンのみの戻るボタンを追加してあげれば OK。

struct NextPage: View {
    @Environment(\.presentationMode) var presentaion
  
    var body: some View {
        Text("Next Page!")
            .navigationTitle("Next Page")
            .navigationBarTitleDisplayMode(.inline)
            // 以下を追加
            .navigationBarBackButtonHidden(true)
            .toolbar {
                ToolbarItem(placement: .navigationBarLeading) {
                      Button(action: { presentaion.wrappedValue.dismiss() }) {
                        Image(systemName: "chevron.backward")
                    }
                }
            }
    }
}

ただし、これだけだとスワイプで戻れなくなってしまうので、以下の Extension を追加する。

extension UINavigationController: UIGestureRecognizerDelegate {
    override open func viewDidLoad() {
        super.viewDidLoad()
        interactivePopGestureRecognizer?.delegate = self
    }

    public func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
        return viewControllers.count > 1
    }
}

Modifier にする

いろんな場面で使う場合、あんな長ったらしいコードは書きたくないので Modifier 化してしまおう。

struct NavigationBarBackButtonTextHidden: ViewModifier {
  @Environment(\.presentationMode) var presentaion
  
  func body(content: Content) -> some View {
    content
      .navigationBarBackButtonHidden(true)
      .toolbar {
        ToolbarItem(placement: .navigationBarLeading) {
          Button(action: { presentaion.wrappedValue.dismiss() }) {
            Image(systemName: "chevron.backward")
          }
        }
      }
  }
}

extension View {
  func navigationBarBackButtonTextHidden() -> some View {
    return self.modifier(NavigationBarBackButtonTextHidden())
  }
}

これにより、一行追加すれば適用されるようになる:tada:

struct NextPage: View {
    var body: some View {
        Text("Next Page!")
            .navigationTitle("Next Page")
            .navigationBarTitleDisplayMode(.inline)
            .navigationBarBackButtonTextHidden()
    }
}

参考

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?