SwiftUI -节的背景色不应用于整个节

a64a0gku  于 2023-10-15  发布在  Swift
关注(0)|答案(1)|浏览(140)

首先,操场的例子,证明了这个问题:

import UIKit
import SwiftUI
import PlaygroundSupport

struct MyList: View {
    
    var body: some View {
        content
    }
    
    private var content: some View {
        List {
            Section {
                Text("hello")
            }
            .background(Color.red) // This only changes small area around text. Looking for Workaround 2
        }
        .background(Color.blue) // This doesn't work (Workaround 1)
        .foregroundColor(Color.yellow)
    }
    
    init() {
        
        // Workaround 1 - works
        UITableView.appearance().backgroundColor = .blue
        
        // Workaround 2 - nothing below helps
        UITableView.appearance().sectionIndexTrackingBackgroundColor = .green
        UITableView.appearance().sectionIndexBackgroundColor = .green
        UITableViewCell.appearance().backgroundColor = .green
        UITableViewCell.appearance().backgroundView = nil
        UITableViewCell.appearance().backgroundConfiguration = .clear()
    }
}

let viewController = UIHostingController(rootView: MyList())

// Present the view controller in the Live View window
PlaygroundPage.current.liveView = viewController

说明:

  • View有一个List,我需要改变背景。有一个众所周知的变通方法,通过UITableView.appearance().backgroundColor来更改它,这就是我所做的。到目前为止还不错。
  • 我还需要改变部分的背景。在下面的图片中,我希望整个部分都是红色,而不是白色。白色根本不应该存在:

但我找不到实现这一目标的方法。如果我将.background(Color.red)添加到Section,它只会更改文本周围的小区域。好的,但是如果白色区域不是List的一部分,也不是Section,那么剩下的白色区域是什么?
我尝试了SO中的各种变通方法,如// Workaround 2 - nothing below helps下所列。他们都没有帮助。
所以我的问题是,简单地说,我如何摆脱这个布局中的白色区域。
注意事项:

  • 我宁愿不从列表中切换出来,除非这是唯一的选择。
  • 涉及内省的答案也很好。
gmxoilav

gmxoilav1#

变更:

.background(Color.red) // This only changes small area around text. Looking for Workaround 2

收件人:

.listRowBackground(Color.red)

Apple Developer Reference

相关问题