0

我有一个普通的 TabView、一个@ObservedObject 和一个正在运行的后台任务,它定期更新@ObservedObject 的@Published 字段。

我注意到,当后台任务更频繁地运行并对@ObservedObject 产生更多更改时,TabView 上的导航选项卡的响应速度会降低——它们会“错过”点击。如果我点击两三下,我通常可以改变视图。背景更新越频繁,点击被“错过”的次数就越多。

所以我想知道 TabView 在重绘时是否以某种方式未能注意到点击,或者类似的东西?

有什么见解吗?


import Foundation
import SwiftUI

struct ContentView2: View {
    enum Tabs {
        case main
        case audio
        case preferences
    }
    
    @State var tab = Tabs.preferences 
    @ObservedObject var appState = Globals.appState

    var body: some View {
        TabView(selection: $tab) {
            MainView()
                .tabItem {
                    Image(systemName: "video.fill")
                    Text("Main")
                }.tag(Tabs.main)
            AudioControlView()
                .tabItem {
                    Image(systemName: "speaker.fill")
                    Text("Audio")
                }.tag(Tabs.audio)
            PreferenceView()
                .tabItem {
                    Image(systemName: "gear")
                    Text("Prefs")
                }.tag(Tabs.preferences)
        }
    }
    
}
4

1 回答 1

0

发现问题...

TabView 不需要 @ObservedObject var appState = Globals.appState,因为 TabView 本身不依赖于@Published字段。

MainView()相反,需要观察各个选项卡(等)。

所以发生的事情是,每次更改都不必要地重新计算和重新绘制 TabView。删除这条线修复了一切。

于 2021-09-16T02:18:12.823 回答