iOS 16 SwiftUI列表背景

0ejtzxu1  于 2023-01-08  发布在  Swift
关注(0)|答案(4)|浏览(288)

随着iOS 16中新的SwiftUI更新,List不再依赖于UITableView。因此,我们用于将List背景色设置为.clear的以下代码片段现在无用:

UITableView.appearance().backgroundColor = .clear

我看到有人用introspect来解决这个问题,但是有人知道另一种可能更干净的方法来实现同样的行为吗?
另请注意,在macOS上,以下功能工作正常(使用Xcode 14 betamacOS Ventura测试):

extension NSTableView {
    open override func viewDidMoveToWindow() {
        super.viewDidMoveToWindow()
        backgroundColor = NSColor.clear
        enclosingScrollView!.drawsBackground = false
    }
}
z4iuyo4d

z4iuyo4d1#

iOS 16系统

更新:Xcode 14b3 +

只需使用新修饰符:

List {
        Text("Item 1")
        Text("Item 2")
        Text("Item 3")
    }
    .scrollContentBackground(Color.red)     // << here !!
//    .scrollContentBackground(Color.clear)     // << transparent !!
//    .scrollContentBackground(.hidden)     // << can be combined with above !!

原件

现在他们使用UICollectionView作为后端,因此更新后的解决方案是更改相应的背景颜色:

主要部分:

extension UICollectionReusableView {
    override open var backgroundColor: UIColor? {
        get { .clear }
        set { }

        // default separators use same color as background
        // so to have it same but new (say red) it can be
        // used as below, otherwise we just need custom separators
        // 
        // set { super.backgroundColor = .red }

    }
}

struct ContentView: View {
    init() {
        UICollectionView.appearance().backgroundColor = .clear
    }
//...

Test module on GitHub

nle07wnf

nle07wnf2#

为此,我创建了一个自定义标识符来隐藏这个自定义滚动背景。

struct ListBackgroundModifier: ViewModifier {

    @ViewBuilder
    func body(content: Content) -> some View {
        if #available(iOS 16.0, *) {
            content
                .scrollContentBackground(.hidden)
        } else {
            content
        }
    }
}

用法:

List {
    ...
}
.modifier(ListBackgroundModifier())
km0tfn4u

km0tfn4u3#

iOS 16添加了一个新的修改器scrollContentBackground(Visibility),用于自定义可滚动视图的背景可见性,包括List
您可以像这样隐藏标准系统背景,如果您提供了一个背景,它将显示列表的背景:

List {
    Text("One")
    Text("Two")
    Text("Three")
}
.background(Image("MyImage"))
.scrollContentBackground(.hidden)
x6492ojm

x6492ojm4#

从Xcode 14.2开始,工作代码为

.scrollContentBackground(.hidden)
.background(.purple)

相关问题