NavigationView中 List的大标题在设置背景色时不起作用

移动开发 2026-07-09

我遇到了一个非常奇怪的问题:如果我在NavigationView内放一个List,标题就会消失。但这只有在我设置背景颜色时才会发生。下面是能够工作的代码。

import SwiftUI

struct ContentView: View {
    var body: some View {
        NavigationView {
            ZStack {
                Text("World")
            }
            .navigationTitle("Hello")
            .toolbarBackground(Color.pink.opacity(1),for: .navigationBar)
            .toolbarBackground(.visible, for: .navigationBar)
        }
    }
}

#Preview {
    ContentView()
}

显示标题的图片

然而,一旦我把ZStack替换成List,它就不再起作用了:

import SwiftUI

struct ContentView: View {
    var body: some View {
        NavigationView {
            List {
                Text("World")
            }
            .navigationTitle("Hello")
            .toolbarBackground(Color.pink.opacity(1),for: .navigationBar)
            .toolbarBackground(.visible, for: .navigationBar)
        }
    }
}

#Preview {
    ContentView()
}

一张显示标题的图片

有什么想法为什么它不起作用,我需要做些什么才能在保留背景颜色的同时让大标题工作?

解决方案

如果你使用iOS 16及更高版本,尝试将 NavigationView 替换为 NavigationStack;同时对于iOS 15及更早版本,仍然可以像下面这样使用旧版NavigationView

if #available(iOS 16, *) {
        NavigationStack {
            List {
                ForEach(0..<50, id: \.self) {
                    Text("Row \($0)")
                }
            }
            .navigationTitle("Hello")
            .toolbarBackground(Color.pink.opacity(1),for: .navigationBar)
            .toolbarBackground(.visible, for: .navigationBar)
        }
    } else {
        NavigationView {
            List {
                ForEach(0..<50, id: \.self) {
                    Text("Row \($0)")
                }
            }
            .navigationTitle("Hello")
            .toolbarBackground(Color.pink.opacity(1),for: .navigationBar)
            .toolbarBackground(.visible, for: .navigationBar)
        }
    }
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章