2

我正在尝试显示List包含Toggle元素的行的动态。s 最初的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)。)

我做错了什么,还是这是一个错误?如何让Toggles 正确显示?

4

2 回答 2

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)

向 Apple 提交反馈

解决方法

这个错误似乎只影响Listdata参数的初始化程序。此代码在功能上是等效的,但不受该错误的影响。

struct SwitchList: View {
    var body: some View {
        List {
            ForEach(0..<20) { _ in
                SwitchRow(value: Bool.random())
            }
        }
    }
}
于 2019-11-18T18:11:33.060 回答
1

我能够重现该问题,但无法找出发生这种情况的原因。当我使用 aScrollView()时,Divider()我不再有问题了。这是代码:

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")
        }
    }
}

我希望这有帮助!

于 2019-11-18T16:08:20.740 回答