SwiftUI:列表的背景颜色不变

Posted

技术标签:

【中文标题】SwiftUI:列表的背景颜色不变【英文标题】:SwiftUI: Background color of List not changing 【发布时间】:2019-11-13 08:21:41 【问题描述】:

当我使用 init(检查源代码:从第 10 行开始)时,出现以下错误。

从初始化程序返回而不初始化所有存储的属性

如果我在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)
    

【问题讨论】:

查看这个答案。它会给你一些想法:***.com/a/58639134/8397245 【参考方案1】:

该问题与List 无关。 Xcode 试图告诉你,你没有初始化所有存储的属性。

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

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

由于您使用的是@Binding,并且您可能是从以前的视图设置它(由于 cmets),您可以将 init() 代码移到类之外的其他位置,例如 onAppear

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

【讨论】:

这是@Binding 变量,我们不应该将任何初始值设置为来自上一个屏幕。 你正在使用自定义初始化程序,所以你应该这样做。 好的,明白了。请告诉我更改列表背景颜色的方法。 我的方法是通过 UITableview.appearance。但我需要在现场。不是整个应用程序。 看最后一行。

以上是关于SwiftUI:列表的背景颜色不变的主要内容,如果未能解决你的问题,请参考以下文章

Swiftui 将列表叠加到背景颜色

SwiftUI 列表颜色背景

SwiftUI 列表背景颜色 [重复]

更改 SwiftUI 列表视图的背景颜色

如何在swiftUI中将背景颜色添加到列表中

如何在 SwiftUI 列表中设置选定的行背景颜色?