swift - 包含 @State 属性的 ScrollView 会导致滚动出现故障 - SwiftUI
问题描述
@State
每次更新属性时,这个简单的 ScrollView 都会出现非常错误的滚动。
import SwiftUI
struct ContentView: View {
@State var currentTime: Double = 0
let timer = Timer.publish(every: 0.5, on: .main, in: .common).autoconnect()
var body: some View {
ScrollView {
Text("currentTime: \(currentTime)")
}
.onReceive(timer) { input in
currentTime = input.timeIntervalSince1970
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
故障滚动视频。ScrollView
不工作。
我试过的
- 把
.onReceive
里面的ScrollView
@State currentTime
使用除计时器之外的其他方法更新。他们都是这样出故障的。
即使在更新期间,我如何才能ScrollView
平滑滚动?@State
解决方案
I think it is a bug! I was surprised how even is possible because i am updating my ScrollView all the time while scrolling! you need to add one line of code to solve the issue!
import SwiftUI
struct ContentView: View {
@State var currentTime: Double = 0
let timer = Timer.publish(every: 0.5, on: .main, in: .common).autoconnect()
var body: some View {
ScrollView {
Color.clear.frame(height: 0) // <<: Here!
Text("currentTime: \(currentTime)")
}
.onReceive(timer) { input in
currentTime = input.timeIntervalSince1970
}
}
}
推荐阅读
- php - PhpStorm - 有没有办法将 PHPDoc 转换为类型提示并返回类型声明?
- compression - 奥丁失败!LZ4 无效
- android - 在 Kotlin 中处理事件总线的通用侦听器
- java - 如何管理微服务架构中的多对多关系?
- c - 如何在包含预处理器指令中包含 makefile 变量
- javascript - 为什么 Facebook 登录 API 不询问电子邮件访问权限?
- c# - 将 TaskRequestItem 的 UserProperties 传递到 Outlook 应用程序(VSTO 插件)时丢失
- c++ - 如何创建可以包含不同小部件的 QVector 或其他容器?
- android - 启用/禁用 android.nfc.action.TECH_DISCOVERED IntentFilter
- lua - 我在使用 haproxy 中使用 lua 根据查询参数选择后端时遇到问题