【问题标题】:Reverse SwiftUI ScrollView so new Items are at the bottom反转 SwiftUI ScrollView,使新项目位于底部
【发布时间】: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

标签: swift swiftui


【解决方案1】:

与其用另一个数组替换项目,不如直接追加额外的项目。

尝试替换:

 items += Array((item+1)...(item+10))

与:

 items.append(Array((item+1)...(item+10)))

【讨论】:

  • 这里没有替换项目。 += 已经正确地将它们添加到数组中。您也不能使用append(...) 将 Int 数组添加到 Swift 中的 Int 数组中。我的代码示例只是对我实际所做的工作的一个更简单的模拟,即在最后一个项目出现时动态地从 API 加载和添加 10 个项目到数组中。但这与我关于不雅旋转效应的问题无关。
猜你喜欢
  • 2016-09-28
  • 1970-01-01
  • 1970-01-01
  • 2020-08-14
  • 2020-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多