如何在列表中更改ListStyle

Moh*_*d S 8 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)
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

ListStyle协议的遵守方是

  1. CarouselListStyle
  2. DefaultListStyle
  3. GroupedListStyle
  4. PlainListStyle
  5. 边栏列表样式

但是我正在努力尝试使用这样的清单设置新样式

.listStyle(StaticMember<PlainListStyle.Member>.self)
Run Code Online (Sandbox Code Playgroud)

我尝试了很多方法,但是每种样式都向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中的错误

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

Cod*_*der 14

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

.listStyle(GroupedListStyle())
Run Code Online (Sandbox Code Playgroud)

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

其他可用值:

  • PlainListStyle

  • DefaultListStyle


Ric*_*zio 7

Xcode Beta 5及更新的更新

在Xcode Beta 5之后,现在不推荐使用这种方法。现在,Apple为每种样式创建了一个struct实现。所以,你应该做的,如: .listStyle(GroupedListStyle())。同样的方法适用于其他可用样式。

Beta 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 }
}
Run Code Online (Sandbox Code Playgroud)

  • 现在,Xcode 11 beta 5中不赞成使用此答案。 (2认同)