Tim*_*mmy 29 swift swiftui swiftui-list ios16
SwiftUI
随着iOS 16 的新更新List
,不再依赖UITableView
. 因此,我们用来设置List
背景颜色的以下代码片段.clear
现在毫无用处:
UITableView.appearance().backgroundColor = .clear
Run Code Online (Sandbox Code Playgroud)
我看到有人曾经introspect
解决过这个问题,但是有人知道另一种可能更干净的方法来实现相同的行为吗?
另请注意,在 上macOS
,以下工作正常(使用Xcode 14 beta
&测试macOS Ventura
):
extension NSTableView {
open override func viewDidMoveToWindow() {
super.viewDidMoveToWindow()
backgroundColor = NSColor.clear
enclosingScrollView!.drawsBackground = false
}
}
Run Code Online (Sandbox Code Playgroud)
Asp*_*eri 37
只需使用新的修饰符:
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 !!
Run Code Online (Sandbox Code Playgroud)
现在它们用于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
}
//...
Run Code Online (Sandbox Code Playgroud)
Mar*_*nig 29
为此,我创建了一个隐藏此自定义滚动背景的自定义标识符。
struct ListBackgroundModifier: ViewModifier {
@ViewBuilder
func body(content: Content) -> some View {
if #available(iOS 16.0, *) {
content
.scrollContentBackground(.hidden)
} else {
content
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
List {
...
}
.modifier(ListBackgroundModifier())
Run Code Online (Sandbox Code Playgroud)
Jor*_*n H 17
iOS 16 添加了一个新的修饰符,scrollContentBackground(Visibility),用于自定义可滚动视图的背景可见性,包括List
.
您可以像这样隐藏标准系统背景,如果您提供一个,这将显示列表的背景:
List {
Text("One")
Text("Two")
Text("Three")
}
.background(Image("MyImage"))
.scrollContentBackground(.hidden)
Run Code Online (Sandbox Code Playgroud)
Law*_*nez 10
从 Xcode 15.1开始,工作代码是
List {
Text("1")
Text("2")
Text("3")
}
.scrollContentBackground(.hidden)
.background(.purple)
Run Code Online (Sandbox Code Playgroud)