Swiftui 按钮和列表交互修改

Swiftui 按钮和列表交互修改,swiftui,Swiftui,我正在尝试删除列表行的sectionStyle。为了实现类似于tableview的视图,您需要编写以下内容: Listitems,id:\.id{中的项 ItemRowwith:item } 如果要解释每行上的点击事件,可以将ItemRow包装成一个按钮: Listitems,id:\.id{中的项 按钮操作:行{ 项目行项目:项目 } } 有趣的是,当列表知道该按钮时,它将自动提供一个选择动画,如tableView的selectionStyle。对于我的申请,我不希望有这样的机会。有没有办法将

我正在尝试删除列表行的sectionStyle。为了实现类似于tableview的视图,您需要编写以下内容:

Listitems,id:\.id{中的项 ItemRowwith:item } 如果要解释每行上的点击事件,可以将ItemRow包装成一个按钮:

Listitems,id:\.id{中的项 按钮操作:行{ 项目行项目:项目 } }
有趣的是,当列表知道该按钮时,它将自动提供一个选择动画,如tableView的selectionStyle。对于我的申请,我不希望有这样的机会。有没有办法将列表的selectionStyle设置为none?

有许多列表行为,我无法更改。如果您有不同于系统列表视图的特定需求,那么构建自己的列表是非常容易的。这里有一个我用过的简单例子

struct MyListView:View {
    var body: some View {
        ScrollView {
            ForEach(items, id: \.id) { item in
                VStack {
                    Button(action: self.rowTapped) {
                        ItemRow(item: item)
                    }
                    Divider()
                }
            }
        }.padding()
    }
    func rowTapped() {
        print("rowTapped")
    }
}

struct ItemRow:View {
    var item:Item

    var body: some View {
        HStack {
            Text(item.name)
            Spacer()            // force text to left justify
        }
    }
}

谢谢您知道如何在数据源更改时实现addRow/removeRow/performBatchUpdates动画吗?我尝试使用ForEach,但它的缺点是没有很好的diff动画。如果不需要垂直滚动,则应用于包含列表的VStack的.animation.spring修改器似乎会生成类似的列表动画。Beta 6及更早版本中有太多与列表相关的问题,我计划等到未来的Beta版。还注意到ForEach不会为您处理单元重用,因此长列表可能会破坏内存并阻塞主线程。我试着使用3000个细胞,它们一次全部被载入内存。这个大的渲染过程在主线程上造成了几秒钟的阻塞,并且在滚动期间帧下降。你有什么建议可以缓解这种情况吗?我不知道。如果动态筛选列表,则对于500+以上的大型数据集,列表视图也会遇到严重的性能问题。在我的一个应用程序中,900个项目的列表加载速度很快,但如果过滤到30个项目左右,更新可能需要很多秒。我认为我们需要等待,直到这得到更好的充实在未来的更新。