SwiftUI列表中某些行的布局问题

时间:2019-11-21 00:07:05

标签: ios swift xcode swiftui

我试图找到之前问过的类似问题,但是失败了。

我有一个简单的列表视图。在将真实数据添加到此列表之前,我正在使用ForEach显示某个列表项的10次迭代以创建布局。我有最后2行无法正确呈现的问题。但有时是另一排。我也曾在iPhone上进行过测试,有时是一排,有时是另一排。带有列表的视图的代码是这样的:

import SwiftUI

struct LocksView: View {

    @State private var locksPaid = 0

    var body: some View {
        NavigationView {
            List {
                DateView()
                    .listRowInsets(EdgeInsets())

                Picker(selection: $locksPaid, label: Text("Picker")) {
                    Text("All").tag(0)
                    Text("Not paid (2)").tag(1)
                }
                .pickerStyle(SegmentedPickerStyle())
                .padding(10)

                ForEach(0 ..< 10) {item in
                    LocksItemView()
                }

            }
            .navigationBarTitle(Text("Locks"))
            .navigationBarItems(trailing: EditButton())
        }
    }
}

列表项的代码是这样的:

import SwiftUI

struct LocksItemView: View {

    @State private var paid : Bool = false

    var body: some View {
        HStack {

            Text("L15")
                .font(.title)
                .fontWeight(.heavy)
                .multilineTextAlignment(.center)
                .frame(width: 80)

            VStack(alignment: .leading) {
                Text("nickname")
                    .fontWeight(.bold)
                Text("category")
                Text("4 000 THB")
                    .fontWeight(.bold)
            }

            Spacer()

            Toggle(isOn: self.$paid) {
                Text("Paid")
            }
            .labelsHidden()
        }
    }
}

为什么在列表的某些行中切换开关损坏?为什么它会移到左侧?

enter image description here

2 个答案:

答案 0 :(得分:1)

这不是最后一项。如果您将ForEach设置为20而不是10,然后向上或向下滚动,则会看到更多有趣的问题。

我认为实际上是List错误的原因与this topic中的原因相同。

解决方法,如果这对您来说并不重要,请使用ScrollView代替List(经测试,没有错误)。否则,请提交雷达并等待修复。

答案 1 :(得分:1)

我首先在模拟器上尝试了您的代码,也遇到了同样的问题。但是后来我想起,13.2 iOS出现了一些问题,并尝试在我的设备(iPhone 7,iOS 13.1.1)上运行它,并且一切正常!我认为这是13.2 iOS中的问题,而不是列表中的问题。有一个示例,我如何更改代码以演示一切正常:

import SwiftUI

struct LocksView: View {

    @State private var locksPaid = 0

    var body: some View {
        NavigationView {
            List {
                Picker(selection: $locksPaid, label: Text("Picker")) {
                    Text("All").tag(0)
                    Text("Not paid (2)").tag(1)
                }
                .pickerStyle(SegmentedPickerStyle())
                .padding(10)

                ForEach(0 ..< 200) {item in
                    LocksItemView(number: item)
                }

            }
            .navigationBarTitle(Text("Locks"))
            .navigationBarItems(trailing: EditButton())
        }
    }
}

struct LocksItemView: View {

    @State private var paid : Bool = false
    var number: Int

    var body: some View {
        HStack {

            Text("L\(self.number)")
                .font(.title)
                .fontWeight(.heavy)
                .multilineTextAlignment(.center)
                .frame(width: 80)

            VStack(alignment: .leading) {
                Text("nickname")
                    .fontWeight(.bold)
                Text("category")
                Text("4 000 THB")
                    .fontWeight(.bold)
            }

            Spacer()

            Toggle(isOn: self.$paid) {
                Text("Paid")
            }
            .labelsHidden()
        }
    }
}

在我的手机上,结果是:

enter image description here

因此13.2版中存在一些错误,我希望Apple会修复所有问题