我尝试在 SwiftUI 上制作一个计时器,效果很好:
import SwiftUI
import Combine
struct ContentView: View {
let currentTimePublisher = Timer.TimerPublisher(interval: 1.0, runLoop: .main, mode: .default)
.autoconnect()
@State private var currentTime = Date()
var body: some View {
VStack{
Text("Time is:")
Text("\(currentTime)")
}.onReceive(currentTimePublisher) { (date) in
self.currentTime = date
}
}
}
但是,我尝试将 VStack 放入任何可滚动的内容中,例如 List 或 ScrollView,当我滚动屏幕时我没有更新。当我不滚动时它工作得很好。
正如您所看到的,我还将 TimerPublisher 放在主线程上,但这并没有改变任何东西。
如何让 SwiftUI 在滚动/交互时更新时间?
滚动视图以不同的模式运行运行循环(不是.default
)同时跟踪触摸。使用方式.common
而不是模式.default
在“常见”运行循环模式下安排计时器,其中包括滚动跟踪模式:
let currentTimePublisher = Timer.TimerPublisher(interval: 1.0, runLoop: .main, mode: .common)
.autoconnect()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)