更改页面时,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