SwiftUI:列表的背景颜色不变

当我使用init(检查源代码:来自第10行)时,出现波纹管错误。

  

在不初始化所有存储属性的情况下从初始化器返回

如果我在UITableView.appearance().backgroundColor = .clear中使用didFinishlaunchingWithOptions可以正常工作。但是情况应该是这样。我需要仅在一个contoller中更改列表的颜色。

这是我的代码:

import UIKit
import SwiftUI
struct PortalSetupView: View {
@State var title = ""
@Binding var isnavigationBarHidden: Bool
@State var name: String = ""
let datasource: [String] = ["Hi","Hello"]

init() {
    UITableView.appearance().backgroundColor = .clear // tableview background
    UITableViewCell.appearance().backgroundColor = .clear // cell background
}
var body: some View {
    VStack(alignment:.leading){
        Text("Hey")
            .font(.system(size: 17))
            .padding(.init(top: 10,leading: 0,bottom: 30,trailing: 0))
        TextField("Hey there",text: $name)
        Divider().padding(.init(top: 0,bottom: 20,trailing: 0))
        List{
            Section(header: Text("My header").font(.system(size: 15))) {
                ForEach(datasource,id: \.self) { item in
                    RegionView(region: item)
                }
            }
        }.background(Color.yellow)
            .listStyle(GroupedListStyle())

        Button(action: {
        }){
            Text("My Button").foregroundColor(.white)
                .frame(minWidth: 0,maxWidth: .infinity)
        }.padding()
            .background(Color("LightRed"))
            .cornerRadius(10)
    }
        .navigationBarTitle("My Navigation")
        .navigationBarBackButtonHidden(true)
        .onAppear {
            self.isnavigationBarHidden = false
        }.padding([.leading,.trailing],18)
    }
}
struct RegionView: View {
    var region: String
    var body: some View {
        Text(region)
    }
}
sdxfvxcvbxdjifnpgois 回答:SwiftUI:列表的背景颜色不变

该问题与List没有关系。 Xcode试图告诉您您不初始化所有存储的属性。

在您提供的代码中,您忘记为isNavigationBarHidden变量设置初始值

Swift有一个严格的规则,它会强制您在尝试获取之前为定义的每个变量设置一个初始值。因此,在实现init()方法时,必须初始化所有没有初始值的存储属性,然后才能从函数返回。

由于您使用的是@Binding,并且可能是在以前的视图中进行设置(由于注释),因此您可以将init()代码移到类之外的其他地方,例如onAppear

您可能希望在onAppear中执行此操作,并在onDisappear中撤消该操作,以使其看起来仅适用于该控制器。

本文链接:https://www.f2er.com/3111831.html

大家都在问