我正在尝试显示包含行List
元素的动态Toggle
。 Toggle
最初的布局正确,但是当它们滚动进出视图时(即,在单元重用时),其布局会中断。
最小示例代码:
import SwiftUI
struct SwitchList: View {
var body: some View {
List(0..<20) { _ in
SwitchRow(value: Bool.random())
}
}
}
struct SwitchRow: View {
@State var value: Bool
var body: some View {
Toggle(isOn: $value) {
Text("A switch row")
}
}
}
(这是在模拟器上使用iOS 13.2.2(17B102)。)
我是在做错什么,还是一个错误?如何使Toggle
正确显示?
答案 0 :(得分:2)
这是iOS 13.2+中的错误/回归
工作-iOS 13.1(17A844)/ Xcode 11.1(11A1027)
损坏-iOS 13.2.2(17B102)/ Xcode 11.2.1(11B500)
损坏-iOS 13.3 beta(17C5032d)/ Xcode 11.3 beta(11C24b)
解决方法
此错误似乎只影响使用List
参数的data
初始化程序。这段代码在功能上是等效的,但不受该错误的影响。
struct SwitchList: View {
var body: some View {
List {
ForEach(0..<20) { _ in
SwitchRow(value: Bool.random())
}
}
}
}
答案 1 :(得分:1)
我能够重现该问题,但找不到原因。当我将ScrollView()
与Devider()
一起使用时,我不再遇到问题了。这是代码:
struct SwitchList: View {
var body: some View {
ScrollView {
ForEach(1...50, id: \.self) { item in
VStack {
SwitchRow(value: Bool.random())
Divider()
}
}
}
}
}
struct SwitchRow: View {
@State var value: Bool
var body: some View {
Toggle(isOn: $value) {
Text("A switch row")
}
}
}
我希望这会有所帮助!