首页 > 解决方案 > SwiftUI:使插入列表背景透明?

问题描述

我如何将灰色背景设置List为完全透明以让红色通过?

灰色的

struct ContentView: View {
    var body: some View {
        NavigationView {
            ZStack {
                Color.red
                    .ignoresSafeArea()
                VStack {
                    HStack {
                        Text("Faux Title")
                            .font(.system(.largeTitle, design: .rounded))
                            .fontWeight(.heavy)
                        Spacer()
                        Button(action: {
                            // settings
                        }, label: {
                            Image(systemName: "gearshape.fill")
                                .font(.system(.title2))
                        })
                    }
                    .padding()
                    .navigationBarHidden(true)
                    
                    List {
                        Text("One")
                        Text("Two")
                        Text("Three")
                    }
                    .listStyle(InsetGroupedListStyle())
                }
            }
        }
    }
}

标签: swiftuiswiftui-list

解决方案


在 View 的 init() 中更改UITableView.appearance:我们在 SwiftUI 中使用的最多的东西,例如 List 或 NavigationView,. . 它们不是纯粹的 SwiftUI,它们来自 UIKit,因此我们使用 UIKit 代码类型来改变外观。如果你记得我们应该在 UIKit 中使用这样的代码。当我们UITableView在 init 中使用时,我们正在访问UITableView UIKit 的类,这意味着这个更改将适用于我们项目中他们正在使用 List 的任何 View。

最好的方法是您正在做的方式,设置透明颜色,然后在正文中从 SwiftUI 更改颜色!这是最方便的方法。


struct ContentView: View {
    
    init() { UITableView.appearance().backgroundColor = UIColor.clear }   // <<: here!
    
    var body: some View {
        NavigationView {
            ZStack {
                Color.red
                    .ignoresSafeArea()
                VStack {
                    HStack {
                        Text("Faux Title")
                            .font(.system(.largeTitle, design: .rounded))
                            .fontWeight(.heavy)
                        Spacer()
                        Button(action: {
                            // settings
                        }, label: {
                            Image(systemName: "gearshape.fill")
                                .font(.system(.title2))
                        })
                    }
                    .padding()
                    .navigationBarHidden(true)
                    
                    List {
                        Text("One")
                        Text("Two")
                        Text("Three")
                    }
                    .listStyle(InsetGroupedListStyle())
                }
            }
        }
    }
}

推荐阅读