将内容添加到我的ListView时,我希望它自动向下滚动.

我用的是SwiftUI ListBindableObject作为控制器.新数据将被添加到列表中.

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及以下版本,您可以try :

我发现翻转视图似乎对我很有效.这将在底部启动ScrollView,并在向其添加新数据时自动向下滚动视图.

  1. 将最外面的视图旋转180到.rotationEffect(.radians(.pi))
  2. 将其翻转到垂直平面.scaleEffect(x: -1, y: 1, anchor: .center)

你也必须对你的内部视图这样做,因为现在它们都会被旋转和翻转.要将它们翻转回go ,请执行上面的相同操作.

如果你需要这么多的地方,可能值得为此定制一个视图.

您可以try 以下方法:

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)

这里有一个视图扩展来翻转它

extension View {
    public func flip() -> some View {
        return self
            .rotationEffect(.radians(.pi))
            .scaleEffect(x: -1, y: 1, anchor: .center)
    }
}

Swift相关问答推荐

如何使用RxSwift根据数据数绘制UICollectionView单元格

SwiftUI:使视图B与视图A具有相同宽度的视图A更改比率?

SwiftUI - NavigationLink(value:)和navigationDestination不工作

修改数组中每个类实例的属性

background Task(.backgroundTask)不适用于MySQL

对实例方法appendInterpolation的调用没有完全匹配

为什么自定义串行队列的目标是全局队列时,Swift中不会并发执行?

Swift 并发任务与调度队列线程:是什么决定同时运行多少任务?

从 actor 的 init 方法调用方法

如何在 SceneKit 上制作毛玻璃效果

一组可散列的自定义元素插入相等的元素

Swift并发:为什么不在其他后台线程上执行任务

Swift - 给定一个像 30 的 Int 如何将范围数乘以 7?

如何从另一个 swift 文件中调用函数

VStack SwiftUI 中的动态内容高度

临时添加到视图层次 struct 后,Weak view引用不会被释放

如何使用 Swift/iOS 为人类书写的笔画制作动画?

Swift 动画 WithDuration 语法是什么?

如何在 Swift 中将对象归零

键盘显示时Tableview滚动内容