【问题标题】:SwiftUI TabView memory footprint continuously increases when changing page更改页面时,SwiftUI TabView 内存占用不断增加
【发布时间】:2020-12-17 08:13:41
【问题描述】:
struct ContentView: View {
    
    @State private var selectedIdx = 0
    
    var body: some View {
        TabView(selection: $selectedIdx) {
            ForEach(0..<5) { idx in
                Text("\(idx)")
            }
        }
        .tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
    }
}

环境:Xcode 12.2 iOS 14.2

当我在页面之间滑动时,SwiftUI 内存中的 TabView 会不断增加。 运行仪器,我没有看到任何泄漏,但分配和持久内存不断增加。

理想情况下,即使每次都重新创建页面,这 5 个页面所消耗的总内存(如上面的代码中所示)也不应该改变。

这是 SwiftUI 中的错误吗?还是我错过了什么?

【问题讨论】:

  • 我面临同样的问题,但无法找出问题所在。它看起来像 TabView 的错误。当您的页面具有复杂的 UI 时,当您在页面之间滑动时会导致性能不佳的问题。你有办法解决吗?
  • 不,我还是不知道为什么

标签: swiftui ios14 swiftui-tabview


【解决方案1】:

这段代码为我修复了一个错误

struct TabViewWrapper<Content: View, Selection: Hashable>: View {
    @Binding var selection: Selection
    @ViewBuilder let content: () -> Content
    
    var body: some View {
        TabView(selection: $selection, content: content)
    }
}

将TabView(selection:) 替换为TabViewWrapper(selection:)

TabViewWrapper(selection: $selection) {
    tabContent
}
.tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))

【讨论】:

    猜你喜欢
    • 2020-11-19
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 2013-11-06
    • 1970-01-01
    • 2020-11-01
    相关资源
    最近更新 更多