为啥在 SwiftUI 中显示视图时 List 的背景颜色不同?

Posted

技术标签:

【中文标题】为啥在 SwiftUI 中显示视图时 List 的背景颜色不同?【英文标题】:Why background color of List is different while presenting view in SwiftUI?为什么在 SwiftUI 中显示视图时 List 的背景颜色不同? 【发布时间】:2020-08-10 18:36:41 【问题描述】:

我正在呈现视图 (AddItemView) 中实现列表。我希望任何视图中的背景颜色都与 List 相同。

struct HomeView: View 
    @State private var showAddItemView: Bool = false
    var body: some View 
        NavigationView 
            List(0..<9, id: \.self)  i in
                Text("Row \(i)")
            
            .navigationTitle("Home")
            .navigationBarItems(trailing:
                Button("Add") 
                    showAddItemView.toggle()
                )
            .sheet(isPresented: $showAddItemView) 
                AddItemView()
                
        
    


struct AddItemView: View 
    init()
        UITableView.appearance().backgroundColor = .clear
    
    var body: some View 
        NavigationView 
            List(0..<9, id: \.self)  i in
                Text("Row \(i)")
            .background(Color(UIColor.systemGroupedBackground))
            .listStyle(InsetGroupedListStyle())
            .navigationBarTitle("Add Item View", displayMode: .inline)    
        
    

上面的代码是用 InsetGroupedListStyle 创建简单的列表。但是呈现视图时背景颜色不同(在我的情况下为 AddItemView)。

我已经尝试过https://***.com/a/58427518/7084910

如何在呈现的视图中设置列表的背景颜色,就像在任何普通列表中一样。 Red/Yellow/Green 可以设置为 List,“但是”我想要与 HomeView 中的普通列表相同,可以在明暗模式下工作。

【问题讨论】:

什么是呈现视图?你会显示代码吗? @Asperi,我已经更新了问题 【参考方案1】:

使用这个:

var body: some View 
    NavigationView 
        List(0..<9, id: \.self)  i in
            Text("Row \(i)")
        
        .colorMultiply(Color.red)

    

【讨论】:

Red、Yellow、Green 等正在使用 init() .clear 。但我想要与 HomeView 中的相同。 选择与 rgb 值相同的颜色并使用它。你还在用 ans 遇到什么问题? 适用于明暗模式。 systemGroupedBackground 非常适合两者。我想要没有配色方案的条件。【参考方案2】:

他们认为这是.sheet 更好的视觉表示(可能是为了使其更可确定)...

SwiftUI 2.0

.fullScreenCover 提供您想要的。另一种方法是使用一些转换手动呈现AddItemView

.navigationBarItems(trailing:
    Button("Add") 
        showAddItemView.toggle()
    )
.fullScreenCover(isPresented: $showAddItemView) 
    AddItemView()

【讨论】:

感谢您的解决方案。但就我而言,HomeView 已经是 fullScreenCover。

以上是关于为啥在 SwiftUI 中显示视图时 List 的背景颜色不同?的主要内容,如果未能解决你的问题,请参考以下文章

使用 SwiftUI,我们在 List 中安装了一个 Button。为啥当我点击按钮显示模态然后再次关闭时模态消失?

为啥 SwiftUI 不能正确显示两个视图?

SwiftUI嵌入Stack样式导航视图(NavigationView)中List显示怪异的解决

Xcode预览(Preview)显示List视图内容的一个Bug及解决

Xcode预览(Preview)显示List视图内容的一个Bug及解决

滚动视图中的内容作为列表项在滚动(swiftui)时消失,为啥?