如何更改列表中的 ListStyle
How to change ListStyle in List
在 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
协议的遵守方是
- CarouselListStyle
- 默认列表样式
- GroupedListStyle
- PlainListStyle
- 侧边栏列表样式
但是我正在努力尝试为列表设置新样式
像这样使用它
.listStyle(StaticMember<PlainListStyle.Member>.self)
我尝试了很多方法,但每个确认 ListStyle
的样式都是结构,就像它们不是枚举值
有人知道如何更改 List
的样式吗?
错误Xcode
Cannot convert value of type 'StaticMember.Type' (aka 'StaticMember>.Type') to expected argument type 'StaticMember<_>'
使用:.listStyle(StaticMember<PlainListStyle.Member>)
错误Xcode
Cannot convert value of type '(StaticMember).Type' (aka 'StaticMember>.Type') to expected argument type 'StaticMember<_>'
使用:.listStyle(StaticMember<PlainListStyle()>)
或 .listStyle(StaticMember<PlainListStyle.self>)
错误Xcode
'>' is not a postfix unary operator
更新 Xcode 13
因此 Apple 添加了一个扩展,使其语法类似于 Xcode 11 Beta 5 及更低版本:
extension ListStyle where Self == GroupedListStyle {
/// The list style that describes the behavior and appearance of a grouped
/// list.
///
/// On iOS, the grouped list style displays a larger header and footer than
/// the ``ListStyle/plain`` style, which visually distances the members of
/// different sections.
public static var grouped: GroupedListStyle { get }
}
所以我们现在可以再次使用它了:
.listStyle(.grouped)
更新 Xcode 11 Beta 5 至 Xcode 12
在 Xcode Beta 5 之后,listStyle(.grouped)
方法被弃用(直到 Xcode 12);现在 Apple 为每种样式创建了一个结构实现。所以你应该这样做:
.listStyle(GroupedListStyle())
。相同的方法适用于其他可用样式。
pre beta 5 的旧实现
就做.listStyle(.grouped)
。对于其他列表样式,请使用
.carousel
.default
.plain
.sidebar
基本上您只是将 ListStyle.grouped
传递给该方法,但是由于 swift 类型推断,您不需要指定结构。
每个静态成员都是这样工作的。
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 }
}
从 Xcode 11 beta 5 开始,Apple 需要以下内容,简要 概述了 here:
.listStyle(GroupedListStyle())
以下是各种样式的细分以及它们可以在 iOS 和 watchOS 之间使用的地方,以及以及它们的推出时间。
iOS 和 watchOS
在 iOS 13 和 watchOS 6 中引入:
PlainListStyle
ListStyle
DefaultListStyle
iOS 仅
引入 iOS 13:
GroupedListStyle
引入 iOS 14:
InsetGroupedListStyle
InsetListStyle
SidebarListStyle
这个问题的一些答案还包括特定于 watchOS 的样式,但没有明确标记,尽管问题被标记为 iOS。为了完整性...
仅限 watchOS
随 watchOS 6 引入:
CarouselListStyle
随 watchOS 7 引入:
EllipticalListStyle
在Xcode11.2.1,正确答案在下面
.listStyle(GroupedListStyle())
Conforming Types ->
CarouselListStyle
DefaultListStyle
GroupedListStyle
PlainListStyle
SidebarListStyle
参考:https://developer.apple.com/documentation/swiftui/liststyle
在 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
协议的遵守方是
- CarouselListStyle
- 默认列表样式
- GroupedListStyle
- PlainListStyle
- 侧边栏列表样式
但是我正在努力尝试为列表设置新样式 像这样使用它
.listStyle(StaticMember<PlainListStyle.Member>.self)
我尝试了很多方法,但每个确认 ListStyle
的样式都是结构,就像它们不是枚举值
有人知道如何更改 List
的样式吗?
错误Xcode
Cannot convert value of type 'StaticMember.Type' (aka 'StaticMember>.Type') to expected argument type 'StaticMember<_>'
使用:.listStyle(StaticMember<PlainListStyle.Member>)
错误Xcode
Cannot convert value of type '(StaticMember).Type' (aka 'StaticMember>.Type') to expected argument type 'StaticMember<_>'
使用:.listStyle(StaticMember<PlainListStyle()>)
或 .listStyle(StaticMember<PlainListStyle.self>)
错误Xcode
'>' is not a postfix unary operator
更新 Xcode 13
因此 Apple 添加了一个扩展,使其语法类似于 Xcode 11 Beta 5 及更低版本:
extension ListStyle where Self == GroupedListStyle {
/// The list style that describes the behavior and appearance of a grouped
/// list.
///
/// On iOS, the grouped list style displays a larger header and footer than
/// the ``ListStyle/plain`` style, which visually distances the members of
/// different sections.
public static var grouped: GroupedListStyle { get }
}
所以我们现在可以再次使用它了:
.listStyle(.grouped)
更新 Xcode 11 Beta 5 至 Xcode 12
在 Xcode Beta 5 之后,listStyle(.grouped)
方法被弃用(直到 Xcode 12);现在 Apple 为每种样式创建了一个结构实现。所以你应该这样做:
.listStyle(GroupedListStyle())
。相同的方法适用于其他可用样式。
pre beta 5 的旧实现
就做.listStyle(.grouped)
。对于其他列表样式,请使用
.carousel
.default
.plain
.sidebar
基本上您只是将 ListStyle.grouped
传递给该方法,但是由于 swift 类型推断,您不需要指定结构。
每个静态成员都是这样工作的。
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 }
}
从 Xcode 11 beta 5 开始,Apple 需要以下内容,简要 概述了 here:
.listStyle(GroupedListStyle())
以下是各种样式的细分以及它们可以在 iOS 和 watchOS 之间使用的地方,以及以及它们的推出时间。
iOS 和 watchOS
在 iOS 13 和 watchOS 6 中引入:
PlainListStyle
ListStyle
DefaultListStyle
iOS 仅
引入 iOS 13:
GroupedListStyle
引入 iOS 14:
InsetGroupedListStyle
InsetListStyle
SidebarListStyle
这个问题的一些答案还包括特定于 watchOS 的样式,但没有明确标记,尽管问题被标记为 iOS。为了完整性...
仅限 watchOS
随 watchOS 6 引入:
CarouselListStyle
随 watchOS 7 引入:
EllipticalListStyle
在Xcode11.2.1,正确答案在下面
.listStyle(GroupedListStyle())
Conforming Types ->
CarouselListStyle
DefaultListStyle
GroupedListStyle
PlainListStyle
SidebarListStyle
参考:https://developer.apple.com/documentation/swiftui/liststyle