我有一个List带着NavigationLink在……里面NavigationView和一个Button表现出一种情调。
当我显示细节没有问题,但如果我打开模式,显示细节不工作。我的设备(IPhoneXS)与CPU 100%冻结。
代码在我的模拟器上工作。
我名单上的代码:
struct ListRoomView: View { @ObservedObject var viewModel : ListRoomViewModel @State var show: Bool = false
var body: some View {
NavigationView {
List(self.viewModel.roomsObj) { room in
NavigationLink(destination:TryView()) {
Text(room.name)
}
.navigationBarTitle("Home").navigationBarItems(trailing:
Button(action: {
self.show = true
}) { Text("Add room ✚") }
)
}
}
.sheet(isPresented: $show, content: { RoomFormView(viewModel: RoomFormViewModel(completion: self.close), show: self.$show)})
}
func close() {
self.viewModel.update()
}
}
我的详细代码:
struct TryView: View {
var body: some View {
VStack {
ScrollView(.horizontal, showsIndicators: true) {
Text("ezeaea")
Text("ezeaea")
Text("ezeaea")
Text("ezeaea")
Text("ezeaea")
Text("ezeaea")
Text("ezeaea")
Text("ezeaea")
Text("ezeaea")
}
Spacer()
VStack {
Text("ezeaea")
Text("ezeaea")
Text("ezeaea")
Text("ezeaea")
HStack {
Text("ezeaea")
Text("ezeaea")
Text("ezeaea")
}
}
}
.navigationBarTitle("Try Again")
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
从你的描述来看,你遇到了在iOS设备上运行时性能问题,特别是当尝试在已经展示的列表中通过NavigationLink
导航到TryView
页面时,设备CPU使用率激增并出现冻结现象。尽管这个问题在模拟器上运行正常,但在实际设备上的不同表现可能与资源限制、渲染优化或代码执行效率有关。
这里有几个建议和排查方向,你可以尝试以下方法来优化和解决问题:
减少视图重绘:
TryView
中的每个Text
视图内容是静态的,或者如果它们依赖于数据,请确保没有不必要的计算逻辑在每次视图刷新时执行。@State
或@Binding
仅在数据确实变化时才更新UI。优化ScrollView:
ScrollView
中,如果有大量静态文本,考虑是否可以减少直接子视图的数量,或者使用LazyVStack
(垂直滚动)/LazyHStack
(水平滚动)替代,以实现按需加载,减少内存占用和提高滚动性能。检查后台任务和数据处理:
ListRoomViewModel
中的update()
方法以及其他任何异步操作或数据处理逻辑是否正确管理了线程,避免在主线程上进行耗时操作。内存泄漏检查:
简化导航结构:
NavigationView
和NavigationLink
的使用上没有过度嵌套,保持导航路径尽可能简洁。测试不同的iOS版本:
分批加载数据:
ListRoomViewModel.roomsObj
包含大量数据,考虑实现分页加载或按需加载机制,而不是一次性加载所有数据到列表中。升级至最新版SwiftUI和Xcode:
如果以上步骤都不能解决问题,可能需要更详细的日志输出或性能分析来定位具体瓶颈所在。希望这些建议能帮助你找到并解决性能问题。