NavigationViewでdisplayModeを指定すると、起動時にアプリがクラッシュした。Xcode 12 beta 2で修正されたようだが、Xcode 11.6であればかならずクラッシュが発生してしまう。
実行環境
- Xcode 11.6
- iOS 13.6
問題の挙動
これは実行できる。
struct HomeView : View { var body: some View { NavigationView { VStack { Text("ねこ") } .navigationViewStyle(StackNavigationViewStyle()) .navigationBarTitle(R.string.localizable.home_title()) .navigationBarItems(leading: Text("設定")) } .onAppear { FA.track(page: "ホーム") } } }
これはアプリの実行時にクラッシュする。
struct HomeView : View { var body: some View { NavigationView { VStack { Text("ねこ") } .navigationViewStyle(StackNavigationViewStyle()) .navigationBarTitle(Text(R.string.localizable.home_title()), displayMode: .inline) .navigationBarItems(leading: Text("設定")) } .onAppear { FA.track(page: "ホーム") } } }
解決編
Xcode 12 Beta2では修正されているらしいが、Xcode 11.6時点ではナビゲーションバーの透過フラグを false
にしているとアプリはクラッシュする。
UINavigationBar.appearance().isTranslucent = false
true
にするとアプリがクラッシュしなくなる。
UINavigationBar.appearance().isTranslucent = true
こんなんわからん。