swiftui - 更改页面时,SwiftUI TabView 内存占用不断增加
问题描述
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 中的错误吗?还是我错过了什么?
解决方案
此代码为我修复了一个错误
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))
推荐阅读
- google-chrome - 如何在 Chrome DevTools 网络面板中否定 `is:` 过滤器属性
- c - 如何通过指针访问结构的第二个成员?
- django - Nginx 无法代理传递给 Django docker 容器
- tensorflow - 使用 TPU 运行时在 Google Colab 上训练 Keras 模型时出错
- android - 如何保存和显示共享首选项中的项目
- php - 在 Nextcloud 上通过 SAML 登录失败,并显示“未配置帐户”
- python - 将数据从 Python 数据帧快速插入 SQL Server
- c# - 如何使用来自 ac# 控制台应用程序的 RabbitMQ API 创建 RabbitMQ 用户
- linux - shell脚本键值比较2个文件
- javascript - 将用户导入 Google 套件时忽略错误