在SwiftUI中自下而上滚动

时间:2019-09-25 15:27:35

标签: ios swift uiscrollview swiftui swiftui-list

如何使SwiftUI List从屏幕底部开始滚动(如聊天视图)?

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

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

  

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

     

话虽如此,我还发布了Access underlying UITableView from SwiftUI List,如果解决了该问题,可以作为该问题的答案。

2 个答案:

答案 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”来实现此行为。