ios - SwiftUI:动态 `Toggle` 中的 `List` s 在重用时会破坏其布局吗?

标签 ios toggle swiftui swiftui-list

我正在尝试显示一个动态List,其中包含包含Toggle 元素的行。 Toggle 最初布局正确,但是当它们滚动进和滚出 View 时(即单元格重用时),它们的布局会中断。

最小示例代码:

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

演示该问题的屏幕录制: Toggles in a list have the correct layout initially, but break their layout upon scrolling

(这是在模拟器上使用 iOS 13.2.2 (17B102)。)

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

最佳答案

这是 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)

Submit feedback to Apple

解决方法

此错误似乎仅影响采用 data 参数的 List 初始值设定项。此代码在功能上是等效的,但不受该错误的影响。

struct SwitchList: View {
    var body: some View {
        List {
            ForEach(0..<20) { _ in
                SwitchRow(value: Bool.random())
            }
        }
    }
}

关于ios - SwiftUI:动态 `Toggle` 中的 `List` s 在重用时会破坏其布局吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58916945/

相关文章:

ios - 在 dispatch_async 内部进行网络调用似乎不起作用?

ios - 初始化时的用户单例和 nsuserdefault

ios - 使用 CoreData 和 SwiftUI 更改 To Many 项目的顺序

Javascript JQuery 使用复选框切换嵌套元素

SwiftUI 选择器项目 .foregroundColor() 不起作用

objective-c - 改变正在进行的 CAKeyframeAnimation 动画的速度

Javascript 在不使用 class 或 id 的情况下切换多个按钮

jQuery - 根据字段输入切换标签上显示的文本

ios - 如何在 swiftUI 中呈现 crossDissolve View ?

ios - 在swiftUi中删除并添加模型中的数据时,不会发生过渡