如何在列表中更改ListStyle

时间:2019-06-06 08:49:51

标签: ios swift swiftui

在SwiftUI List中似乎有一个名为ListStyle的属性。

如何更改列表的样式

struct ListView : View {
var body: some View {
    NavigationView {
    List(Item.create().identified(by: \.id)){ row in
        NavigationButton(destination: DetailsView(item: row)) {
            RowView(item: row)
        }
    }
    .listStyle(StaticMember<PlainListStyle.Member>.self) // error here
    .foregroundColor(.red)
    .navigationBarTitle(Text("List View"))
    .statusBar(hidden: false)
    }
  }
}

ListStyle协议的符合各方是

  1. CarouselListStyle
  2. DefaultListStyle
  3. GroupedListStyle
  4. PlainListStyle
  5. SidebarListStyle

但是我在努力为列表设置新样式 像这样

.listStyle(StaticMember<PlainListStyle.Member>.self)

我尝试了很多方法,但是确认ListStyle的每种样式都是结构,就像它们不是枚举值一样

任何人都知道如何更改List的样式吗?

Xcode错误

  

无法将类型“ StaticMember.Type”(也称为“ StaticMember> .Type”)的值转换为预期的参数类型“ StaticMember <_>”

使用:.listStyle(StaticMember<PlainListStyle.Member>)

Xcode错误

  

无法将类型'(StaticMember).Type'(又名'StaticMember> .Type')的值转换为预期的参数类型'StaticMember <_>'

使用:.listStyle(StaticMember<PlainListStyle()>).listStyle(StaticMember<PlainListStyle.self>)

Xcode错误

  

'>'不是后缀一元运算符

3 个答案:

答案 0 :(得分:15)

Apple已弃用了已接受答案中的枚举值,现在要求它从Xcode 11 beta 5开始遵循以下布局:

.listStyle(GroupedListStyle())

注意,在变金之前,还需要进行一些更改。...

其他可用值:

  • PlainListStyle

  • DefaultListStyle

答案 1 :(得分:5)

只需.listStyle(.grouped)。对于其他列表样式,请使用

  • .carousel
  • .default
  • .plain
  • .sidebar

基本上,您只是将ListStyle.grouped传递给该方法,但是由于快速类型推断,您无需指定结构。 每个静态成员都以这种方式工作。

StaticMember表示ListStyle协议中有一个静态成员。声明就是这个。

extension StaticMember where Base : ListStyle {

    /// A `ListStyle` that implements the system default grouped `List`
    /// interaction and appearance.
    public static var grouped: GroupedListStyle.Member { get }
}

答案 2 :(得分:0)

在Xcode 11.2.1中,正确的答案在下面。

.listStyle(GroupedListStyle())

Conforming Types  ->
CarouselListStyle
DefaultListStyle
GroupedListStyle
PlainListStyle
SidebarListStyle

ref:https://developer.apple.com/documentation/swiftui/liststyle