【发布时间】:2021-04-24 09:01:22
【问题描述】:
对项目数组进行排序,以便新项目位于索引 0 处。
我希望 ScrollView 的滚动行为完全反转,以便最新的项目 0 显示在底部,并且用户必须向下滚动新项目才能从滚动视图的顶部滑入旧项目。
当数组中的最后一项出现时,会动态添加旧项。
这是我目前所拥有的,并且它有效,但 180 度旋转效果似乎不优雅。我觉得这是创造性的骇客,必须有更好的方法。
import SwiftUI
struct MyReversedScrollView: View {
@State var items: [Int]
init() {
_items = State(initialValue: Array(1...10))
}
var body: some View {
ScrollView() {
LazyVStack(spacing: 10) {
ForEach(items, id: \.self) { item in
ItemView(item: item)
.zIndex(Double(items.count - item))
.onAppear {
if items.last == item {
items += Array((item+1)...(item+10))
}
}
}
}
}
.rotationEffect(.degrees(-180))
}
}
struct MyReversedScrollView_Previews: PreviewProvider {
static var previews: some View {
MyReversedScrollView()
}
}
struct ItemView: View {
let item: Int
var body: some View {
Text(item.description)
.frame(width: 100, height: 100)
.border(Color.black)
.rotationEffect(.degrees(-180))
}
}
【问题讨论】:
-
我很确定这也是你在 UIKit 中最容易做到的方式。所以我真的没有看到你的问题 tbh:P 我唯一要改变的是在创建列表视图时添加项目旋转,以便在必要时可以在没有旋转的情况下使用项目视图
-
这是否回答了您的问题stackoverflow.com/a/58708206/12299030?