SwiftUI:列表的背景颜色不变
SwiftUI: Background color of List not changing
当我使用 init 时(检查源代码:从第 10 行开始),出现以下错误。
Return from initializer without initializing all stored properties
如果我在 didFinishLaunchingWithOptions
中使用 UITableView.appearance().backgroundColor = .clear
,它工作正常。但应该是这样才知道。我需要单独更改一个控制器中列表的颜色。
这是我的代码:
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, leading: 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)
}
}
此问题与 List
无关。 Xcode 试图告诉您您没有初始化所有存储的属性。
在您提供的代码中,您忘记为 isNavigationBarHidden
变量设置初始值
Swift 有一个严格的规则,强制您在尝试获取 之前为您定义的每个变量设置一个初始值 。所以当你实现一个init()
方法时,你必须在从函数返回之前初始化所有没有初始值的存储属性。
由于您正在使用 @Binding
并且您可能是从以前的视图中设置它(由于评论),您可以将 init()
代码移到 class 之外的其他地方,例如onAppear
您可能想在 onAppear
中执行此操作并在 onDisappear
中撤消它以使其看起来仅适用于该控制器。
当我使用 init 时(检查源代码:从第 10 行开始),出现以下错误。
Return from initializer without initializing all stored properties
如果我在 didFinishLaunchingWithOptions
中使用 UITableView.appearance().backgroundColor = .clear
,它工作正常。但应该是这样才知道。我需要单独更改一个控制器中列表的颜色。
这是我的代码:
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, leading: 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)
}
}
此问题与 List
无关。 Xcode 试图告诉您您没有初始化所有存储的属性。
在您提供的代码中,您忘记为 isNavigationBarHidden
变量设置初始值
Swift 有一个严格的规则,强制您在尝试获取 之前为您定义的每个变量设置一个初始值 。所以当你实现一个init()
方法时,你必须在从函数返回之前初始化所有没有初始值的存储属性。
由于您正在使用 @Binding
并且您可能是从以前的视图中设置它(由于评论),您可以将 init()
代码移到 class 之外的其他地方,例如onAppear
您可能想在 onAppear
中执行此操作并在 onDisappear
中撤消它以使其看起来仅适用于该控制器。