Timer.TimerPublisher не срабатывает при прокрутке - PullRequest
2 голосов
/ 08 октября 2019

Я пытался создать таймер на 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 обновить время, пока я прокручиваю / взаимодействую?

1 Ответ

6 голосов
/ 08 октября 2019

Представление прокрутки запускает цикл выполнения в другом режиме (не .default) во время отслеживания касаний. Используйте режим .common вместо режима .default для планирования таймера в «общих» режимах цикла выполнения, которые включают режим отслеживания прокрутки:

let currentTimePublisher  = Timer.TimerPublisher(interval: 1.0, runLoop: .main, mode: .common)
    .autoconnect()
...