1

如何让 SwiftUIList从屏幕底部开始滚动(如聊天视图)?

理想情况下,我想模仿,例如,当列表更新时 iMessage 的行为,这意味着如果在用户位于底部时添加项目,它会向下移动,但如果用户手动向上滚动则保持它的位置。

该列表直接从绑定数组中读取,如果方便,可以颠倒顺序。

@komal 指出UITableView(的后端List)有一个atScrollPosition应该提供这个功能的。但是,似乎没有一种方法可以在不完全重新实现List为 a 的情况下访问底层视图UIViewRepresentable,这说起来容易做起来难,因为标准实现是完全黑盒和闭源的。

话虽如此,我还从 SwiftUI List 发布了 Access 底层 UITableView,如果解决了,可以作为这个问题的答案。

4

2 回答 2

1

您可以尝试这种反转 a 的方式ScrollView

struct ContentView: View {
    let degreesToFlip: Double = 180

    var body: some View {
        ScrollView(.vertical, showsIndicators: false) {
            ForEach(0..<100) { i in
                HStack {
                    Spacer()
                    Text("Number: \(i)")
                    Spacer()
                }
                .rotationEffect(.degrees(self.degreesToFlip))
            }
            .rotationEffect(.degrees(self.degreesToFlip))
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

这种方法的问题是你反转了所有的内容,ScrollView所以你也反转了内容,但是滚动指示器也被反转了,所以指示器现在在左侧,而不是在右侧。也许有一些配置总是让指示器位于右侧。

请注意,我在此示例代码中禁用了滚动指示器,这也适用于List但在列表中我没有找到任何隐藏滚动指示器的方法。

希望这有所帮助。

于 2020-02-09T21:00:25.177 回答
0

我建议不要使用滚动视图,而是使用 UITableView,因为 Tablview 继承了 UIScrollview 的滚动属性。您可以使用“atScrollPosition:UITableViewScrollPositionBottom”来实现此行为。

于 2019-09-25T15:36:11.393 回答