我在Mac OS中使用列表视图。我试图改变列表视图的背景颜色。但是,这并不像预期的那么容易。
我试着在ListView上使用.background(Color(.red))
属性。这没有改变任何东西。
我只能找到对表行有影响的.listRowBackground(Color(.red))
,其他背景没有影响。
我准备了一个小演示来演示:
在我看来:
VStack
{
List()
{
Text("Test")
.listRowBackground(Color.green)
Text("Test")
.listRowBackground(Color.green)
Text("Test")
.listRowBackground(Color.green)
}.background(Color(.red))
}.background(Color(.red))
这就是我得到的结果:
主背景没有改变。我读到过一个改变UITableView.appearance
的解决方案,但这对我来说在Mac OS的SwiftUI中是不可能的。
先谢了
4条答案
按热度按时间5anewei61#
更新:我发现了一个更好的方法来删除列表的背景,而不会影响整个应用程序:通过使用X1 E0 F1 X。
用法:
旧答案:
@Asperi的答案有效,但只有在窗口大小调整后才有效。下面是覆盖
List
的颜色的另一种解决方案:一个潜在的缺点是,这将影响应用程序中的所有列表。
ars1skjm2#
第一张图片显示了问题的起源-默认情况下,使用的滚动视图是不透明的,因此添加的彩色背景在那里,但不可见
因此,解决方案是找到滚动视图并禁用绘图背景
以下是解决这个问题的可能方法或变通方案(但有效,因为所有修改都是通过AppKit API进行的,没有硬编码)。实际上,这与在XIB中关闭用于滚动视图的复选框相同。使用Xcode 11.2 / macOS 10.15进行测试。
egdjgwm83#
不幸的是,
ListStyle
协议没有文档记录,并且.listStyle
修饰符的使用非常有限,您可以从CarouselListStyle, DefaultListStyle, GroupedListStyle ,PlainListStyle, SidebarListStyle
中选择尝试用ScrollView结合ForEach来模仿List,这给了你很大的灵活性,缺少的部分很容易写。一旦开发人员可以使用ListStyle,更改代码就很容易了...
示例
及源代码
66bbxpm54#
在Xcode 14(Swift 5)中,您可以执行以下操作:
这使得ScrollView背景不可见,而List背景现在可以自定义。