我正在尝试在编辑模式下重新排列List
行。
快速总结:我不希望像Second
这样的DisclosureGroup
行被插入到它们自己的子级层次结构中。如果他们进入任何其他层次/级别也没关系。
下面是一些示例代码:
struct ContentView: View {
var body: some View {
List {
ForEach(0 ..< 1) { _ in
DisclosureGroup("First", isExpanded: .constant(true)) {
ForEach(0 ..< 1) { _ in
Text("Item 1")
Text("Item 2")
DisclosureGroup("Second", isExpanded: .constant(true)) {
// Individual
Text("Item 3")
Text("Item 4")
// Grouped
// ForEach(0 ..< 1) { _ in
// Text("Item 3")
// Text("Item 4")
// }
}
}
}
}
.onMove(perform: { _, _ in })
}
.listStyle(.sidebar)
.environment(\.editMode, .constant(.active))
}
}
这就是行注解的意思:
- 个人**:这将允许行在当前级别内自由移动,但也意味着
DisclosureGroup
行可以在这些元素之间移动(不需要)
- 个人**:这将允许行在当前级别内自由移动,但也意味着
- 分组**:这将把这些视图“锁定”到该层级中。例如,
Item 3
和Item 4
可以交换行,但是这些行不能再拖到其他地方,例如Item 1
和Item 2
之间。
- 分组**:这将把这些视图“锁定”到该层级中。例如,
拖动DisclosureGroup
行时,可以执行以下操作之一:
1.* * 所有的孩子都应该被拖走。
1.不应将此DisclosureGroup
行插入到它自己的任何子行之间。
我们现在只关注视觉UI,因此onMove(perform:)
方法还没有完成。
| 个别法|分组法|
| - -----|- -----|
|
|
|
注意事项:
- 个别方法**:
Second
行可以移动到与Item 3
和Item 4
相同的层,这是不允许的。但是,它允许Item 3
和Item 4
介于Item 1
和Item 2
之间。
- 个别方法**:
- 分组方式**:
Item 3
和Item 4
被“锁定”到它们自己的级别-它们之间不能插入任何视图,也不能移动到与Item 1
和Item 2
相同的级别(坏)。但是,在这种情况下,Second
不能移动到它自己的子级层次结构中(良好)。
- 分组方式**:
我如何解决这个问题,所以我基本上有'individual方法',但像Second
这样的DisclosureGroup
行不能插入到它们自己的子层次结构中?如果他们进入任何其他层次/级别也没关系。
我意识到这是一个相当复杂的问题-所以尝试自己的代码,并观看GIF来理解。
如果它运行正常,我也会接受UIKit解决方案(比如UICollectionView
?).
1条答案
按热度按时间qmelpv7a1#
不幸的是,
.onMove
目前不能处理嵌套的ForEach。我也一直在研究this,我发现的唯一一件事就是扁平化数组,并编写函数来处理嵌套项的移动:。