[tvOS 18][SwiftUI] 更新后 ScrollView 严重滞后

问题描述 投票:0回答:1

我已将两台 Apple TV 升级到 tvOS 18。从那时起,我使用 SwiftUI 开发的应用程序由于严重滞后而几乎无法使用,尤其是在 LazyVStack 中滚动时。在 A1625(Apple TV HD)上,延迟可持续长达 20 秒,而在 A2843(Apple TV 4K,第 3 代,Wi-Fi + 以太网)上,延迟约为 1 秒。

我可以用这个最小的例子一致地重现这个问题:

@main
struct MyApp: App {
    var body: some Scene {
        WindowGroup {
            ScrollView {
                LazyVStack {
                    ForEach(0..<1000) { nb in
                        Button("Item \(nb)") {}
                    }
                }
            }
        }
    }
}

使用 Instruments,我发现挂起与此调用有关:

389.00 ms 71,4 % 6.00 ms +[_UIFocusRegionEvaluator __regionsByEvaluatingOcclusionsForBaseRegions:occludingRegions:baseRegionsCanOccludeEachOther:inSnapshot:]

enter image description here

不幸的是,我无法直接在此处附加仪器跟踪,但您可以从此链接下载它:https://drive.google.com/file/d/1sEIwXhr7_ajjRHZevCIW6jNOlPjaeU6L/view?usp=sharing.

重要提示:

使用 UIKit 编写的同一屏幕可以在两种设备上流畅运行。 在旧设备上执行恢复出厂设置后,性能问题消失了。然而,正如你可以想象的那样,我已经收到了用户的投诉,他们不愿意重置设备,这是可以理解的。

在 Apple 解决此问题之前,有人知道解决方法吗?

swiftui uikit tvos apple-tv
1个回答
0
投票

尝试制作行

identifiable

您发布的示例在模拟器中为我重现了延迟。通过这一行更改,性能变得非常敏捷:

@main
struct MyApp: App {
    var body: some Scene {
        WindowGroup {
            ScrollView {
                LazyVStack {
                    ForEach(0..<1000, id: \.self) { nb in
                        Button("Item \(nb)") {}
                    }
                }
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.