SwiftUIで画面遷移をおこなうNavigationLinkを使う時、NavigationLinkで囲んだビューの色が塗り潰されてしまう問題に遭遇した。

struct ContentView: View {
    var body: some View {
        NavigationLink(destination: DetailView()) {
            VStack {
                Image("pasta")
                    .resizable()
                    .aspectRatio(contentMode: .fill)
                    .frame(width: 250, height: 250)
                    .clipShape(Circle())
                    .padding()
                Text("カルボナーラ")
            }
        }
    }
}

実はこれはNavigationLinkの仕様で、標準のリンク色にビューを塗り潰すという性質があるようだ。

回避策

ImageとTextで、それぞれ対応が違うのだが、以下の方法で本来の表示に戻すことができる。

Imageビューの場合

renderingModeモディファイアでレンダリングモードを変更することができ、originalを設定すると本来の画像として表示させることができる。

Image("pasta")
    .renderingMode(.original) // 追加
    .resizable()
    .aspectRatio(contentMode: .fill)
    .frame(width: 250, height: 250)
    .clipShape(Circle())
    .padding()

Textビューの場合

Textビューの場合は単純にforegroundColorモディファイアで色を指定すれば良い。

Text("カルボナーラ")
    .foregroundColor(.primary)