例如,假设我有一个这样声明的列表
List {
Section {
Text(“Test Row Title 1”)
}
Section {
Text(“Test Row Title 2”)
}
}
是否可以使样式与 UITableView.Style.insetGrouped 相同?我找不到任何相关信息。我以为它会很简单.listStyle(InsetGroupedStyle())
例如,假设我有一个这样声明的列表
List {
Section {
Text(“Test Row Title 1”)
}
Section {
Text(“Test Row Title 2”)
}
}
是否可以使样式与 UITableView.Style.insetGrouped 相同?我找不到任何相关信息。我以为它会很简单.listStyle(InsetGroupedStyle())
在 iOS 13.2 中,您可以设置.environment(\.horizontalSizeClass, .regular)
为.listStyle(GroupedListStyle())
与UITableView.Style.insetGrouped
.
List {
Section {
Text(“Test Row Title 1”)
}
Section {
Text(“Test Row Title 2”)
}
}.listStyle(GroupedListStyle())
.environment(\.horizontalSizeClass, .regular)
显然,iOS/iPadOS 14 中有一个新的 API,它最终允许 InsetGrouped 样式出现在 SwiftUI 中。
List {
...
}
.listStyle(InsetGroupedListStyle())
您可以添加.environment(\.horizontalSizeClass, .regular)
到您的列表中。
下面的代码可能会对您有所帮助,并为您提供自定义视图的解决方案。使用.cornerRadius
和.padding
修饰符:
struct ContentView: View {
var body: some View {
VStack {
List {
Section {
Text("Test Row Title 1")
}
Section {
Text("Test Row Title 2")
}
}.cornerRadius(20)
.padding()
List {
Section {
Text("Test Row Title 3")
}
Section {
Text("Test Row Title 4")
}
}.cornerRadius(20)
.padding()
}.background(Color.blue)
}
}
我的实现并不理想,但这是我现在很满意的。我盯着创建一个 ViewModifier,CardViewModifier(),我用它来创建一个插入卡片视图。我在我的应用程序的几个地方使用它,而不仅仅是列表。
struct CardViewModifier: ViewModifier {
var backgroundColor = Color(.systemBackground)
func body(content: Content) -> some View {
content
.padding()
.frame(maxWidth: .infinity)
.background(Color(.systemBackground))
.cornerRadius(12)
.padding()
}
}
为了“伪造”一个 insetGrouped List,我将 List 转换为 ScrollView,将 Sections 转换为 VStack,就像这样。
struct ContentView: View {
let data = ["Row 1", "Row 2", "Row 3", "Row 4", "Row 5"]
var body: some View {
ScrollView {
VStack {
ForEach(data, id:\.self) { row in
VStack {
Text("Section 1, \(row)")
Divider()
}
}
}
.modifier(CardViewModifier())
VStack {
ForEach(data, id:\.self) { row in
Text("Section 2, \(row)").padding()
}
}
.modifier(CardViewModifier())
}
.background(Color(.secondarySystemBackground))
}
}
就像我说的那样,它并不理想,但在 Apple(或其他人)创建 InsetGroupedListStyle 之前它会起作用。发生这种情况时,应该将 ScrollView 更改回 List 并将 VStacks 更改回 Sections 的简单情况。
祝你好运...