更改页面时,SwiftUI TabView 内存占用不断增加

Posted

技术标签:

【中文标题】更改页面时,SwiftUI TabView 内存占用不断增加【英文标题】:SwiftUI TabView memory footprint continuously increases when changing page 【发布时间】: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 时,当您在页面之间滑动时会导致性能不佳的问题。你有办法解决吗? 不,我还是不知道为什么 【参考方案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))

【讨论】:

以上是关于更改页面时,SwiftUI TabView 内存占用不断增加的主要内容,如果未能解决你的问题,请参考以下文章

使用tabview更改选项卡时如何使SwiftUI中的计时器保持触发

在 SwiftUI 中的 tabview 中嵌入 webview

更改 TabView (SwiftUI) 中未选中图标的颜色

SwiftUI:TabView 动态强调颜色

如何更改 SwiftUI TabView 点指示器位置?

TabView(页面样式)无法缩放以适应它的项目 swiftUI