向 ListView 添加内容时,我希望它自动向下滚动。

我使用 SwiftUI ListBindableObject 作为 Controller 。新数据正在添加到列表中。

List(chatController.messages, id: \.self) { message in
    MessageView(message.text, message.isMe)
}

我希望列表向下滚动,因为我将新数据附加到消息列表中。但是我必须手动向下滚动。

最佳答案

更新:在 iOS 14 中,现在有一种本地方式可以做到这一点。
我这样做

        ScrollViewReader { scrollView in
            ScrollView(.vertical) {
                LazyVStack {
                    ForEach(notes, id: \.self) { note in
                        MessageView(note: note)
                    }
                }
                .onAppear {
                    scrollView.scrollTo(notes[notes.endIndex - 1])
                }
            }
        }
对于 iOS 13 及更低版本,您可以尝试:
我发现翻转 View 对我来说似乎很有效。这会在底部启动 ScrollView,当向它添加新数据时,它会自动向下 ScrollView 。
  • 旋转最外层 View 180 .rotationEffect(.radians(.pi))
  • 在垂直平面上翻转 .scaleEffect(x: -1, y: 1, anchor: .center)

  • 您也必须对您的内部 View 执行此操作,因为现在它们都将被旋转和翻转。要将它们翻转回来,请执行上述相同的操作。
    如果您需要这么多地方,可能值得为此设置自定义 View 。
    您可以尝试以下操作:
    List(chatController.messages, id: \.self) { message in
        MessageView(message.text, message.isMe)
            .rotationEffect(.radians(.pi))
            .scaleEffect(x: -1, y: 1, anchor: .center)
    }
    .rotationEffect(.radians(.pi))
    .scaleEffect(x: -1, y: 1, anchor: .center)
    
    这是一个 View 扩展来翻转它
    extension View {
        public func flip() -> some View {
            return self
                .rotationEffect(.radians(.pi))
                .scaleEffect(x: -1, y: 1, anchor: .center)
        }
    }
    

    关于swift - 如何使 SwiftUI 列表自动滚动?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57258846/

    10-17 01:10