【发布时间】:2021-07-17 11:10:59
【问题描述】:
我有一个通常格式很好的列表。当我更新数组项并重新添加元素时,它会在列表中引入一个大空间,为某些行增加额外的高度。
这里是列表:
点击添加按钮,新项目被添加了额外的高度:
奇怪的是,如果你用添加按钮玩“田径”并快速多次点击它,一切都会正常。
下面是一些演示问题的代码:
import SwiftUI
var newIndex = 0
var newItems = ["Echo", "Tango", "Hotel", "Alpha", "November", "Kilo", "Yankee", "Oscar", "Uniform", "Indigo", "Romeo", "Whisky", "Lima", "Victor", "Charlie", "Foxtrot", "Delta", "Xray", "Papa", "Juliet", "Bravo", "Golf", "Quebec", "Mike", "Sierra", "Zulu"]
struct ContentView: View
{
@State var mainList:[String] = ["Echo", "Tango", "Hotel", "Alpha", "November", "Kilo", "Yankee", "Oscar", "Uniform", "Indigo", "Romeo", "Whisky", "Lima", "Victor", "Charlie", "Foxtrot", "Delta", "Xray", "Papa", "Juliet", "Bravo", "Golf", "Quebec", "Mike", "Sierra", "Zulu"].sorted()
@State var selectedItem:String? = "Echo"
var body: some View
{
NavigationView
{
List()
{
ForEach(mainList, id: \.self)
{item in
NavigationLink(destination: DetailView(item: item), tag: item, selection: $selectedItem, label:
{
Text("\(item)")
})
}
}
}
.toolbar
{
Button(action: {addNewItem()})
{
Label("Select", systemImage: "square.and.pencil")
}
}
}
func addNewItem()
{
if newIndex == newItems.count
{
newIndex = 0
}
let item = newItems[newIndex]
if mainList.contains(item)
{
mainList = mainList.filter({ $0 != item })
}
mainList.append(item)
selectedItem = item
newIndex += 1
}
}
struct DetailView: View
{
@State var item: String
var body: some View
{
Text(item)
}
}
我发现在这种情况下,它是由 filter 命令引起的,但我在我的应用程序的许多列表中都看到了这种行为。我认为这是由于在同一个列表中删除和添加内容引起的。
【问题讨论】: