簡體   English   中英

SwiftUI:在動態“列表”中的“切換”在重用時會破壞其布局?

[英]SwiftUI: `Toggle`s within dynamic `List` breaking their layout upon reuse?

我正在嘗試顯示包含Toggle元素的行的動態List 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正確顯示?

這是 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 提交反饋

解決方法

此錯誤似乎僅影響采用data參數的List初始化程序。 此代碼在功能上是等效的,但不受該錯誤的影響。

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

我能夠重現該問題,但無法找出發生這種情況的原因。 當我將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")
        }
    }
}

我希望這有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM