如何使SwiftUI List
从屏幕底部开始滚动(如聊天视图)?
理想情况下,我想模仿例如列表更新时iMessage的行为,这意味着如果在用户位于底部时添加了一项,它就会向下移动,但是如果用户手动向上滚动,它将保持其位置。
直接从绑定数组中读取列表,如果方便,可以颠倒顺序。
@komal指出
UITableView
(List
的后端)有一个atScrollPosition
,应提供此功能。但是,似乎没有一种方法可以在不完全将List
重新实现为UIViewRepresentable
的情况下访问底层视图,考虑到标准实现是完全被黑盒封闭的,这说起来容易做起来难。源。话虽如此,我还发布了Access underlying UITableView from SwiftUI List,如果解决了该问题,可以作为该问题的答案。
答案 0 :(得分:0)
您可以尝试用这种方式反转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
,但是在列表中我找不到任何隐藏滚动指示器的方法。
希望这会有所帮助。
答案 1 :(得分:-1)
我建议不要使用UITableView,而应使用UITableView,因为Tablview继承了UIScrollview的scroll属性。您可以使用“ atScrollPosition:UITableViewScrollPositionBottom”来实现此行为。