首页 > 解决方案 > 包含 @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不工作。

我试过的

即使在更新期间,我如何才能ScrollView平滑滚动?@State

标签: swiftswiftui

解决方案


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!


enter image description here


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
        }
    }
}

推荐阅读