SwiftUI使用SidebarListStyle的List如何设置背景颜色?
解决方案
使用SidebarListStyle的List默认自带系统层级的背景视图,会覆盖外层添加的自定义背景修饰符,所以直接调用.background()不会生效,可根据需要支持的系统版本选择对应实现方案:
iOS 16 及以上版本
直接使用SwiftUI原生提供的.scrollContentBackground(.hidden)修饰符隐藏系统默认背景,之后添加的自定义背景即可生效,示例代码如下:
List { // 此处为你的列表内容代码 } .listStyle(.sidebar) .scrollContentBackground(.hidden) // 隐藏List自带的默认背景 .background(Color.yellow.ignoresSafeArea())
如果需要列表行也透出背景色,可以额外添加.listRowBackground(Color.clear)修饰符:
List { // 列表内容 } .listStyle(.sidebar) .scrollContentBackground(.hidden) .listRowBackground(Color.clear) .background(Color.yellow.ignoresSafeArea())
iOS 15 及更低版本
由于没有原生的隐藏背景API,可以通过修改UITableView的全局外观实现,有两种实现方式:
- 全局生效:在App入口的初始化方法中设置UITableView的背景色为透明或者目标颜色
@main struct YourApp: App { init() { // 设置列表背景透明 UITableView.appearance().backgroundColor = .clear // 可选:设置列表行背景透明 UITableViewCell.appearance().backgroundColor = .clear } var body: some Scene { WindowGroup { ContentView() } } }
设置完成后再给List添加.background(Color.yellow.ignoresSafeArea())即可生效。
- 仅当前页面生效:在当前页面的生命周期方法中修改和恢复默认外观,避免影响其他页面的列表样式
List { // 列表内容 } .listStyle(.sidebar) .onAppear { UITableView.appearance().backgroundColor = .yellow } .onDisappear { // 退出页面时恢复系统默认背景色 UITableView.appearance().backgroundColor = .systemGroupedBackground }
内容的提问来源于stack exchange,提问作者Shadowman
相关产品推荐
相关产品推荐

