从列表中的NavigationLink推送新列表会冻结模拟器/画布(SwiftUI)
当构建一个可以推送第二个从列表中的NavigationLink推送新列表会冻结模拟器/画布(SwiftUI),swift,xcode,swiftui,Swift,Xcode,Swiftui,当构建一个可以推送第二个项目列表的视图时,XCode模拟器和SwiftUI画布将冻结而不会抛出错误。下面的代码描述了我用于重新创建此问题的视图层次结构: class Listable: Identifiable { var id: UUID = UUID() var name: String = "Name" var title: String = "Title" var description: String = "This is a description"
项目列表的视图时,XCode模拟器和SwiftUI画布将冻结而不会抛出错误。下面的代码描述了我用于重新创建此问题的视图层次结构:
class Listable: Identifiable {
var id: UUID = UUID()
var name: String = "Name"
var title: String = "Title"
var description: String = "This is a description"
}
struct ContentView: View {
var items: [Listable]
var body: some View {
NavigationView {
List(items) { item in
ListCell(item: item)
}
.navigationBarTitle(self.items[0].title)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView(items: testList)
}
}
struct SecondaryListView: View {
var items: [Listable]
var body: some View {
List(items) { item in
ListCell(item: item)
}
.navigationBarTitle(self.items[0].title)
}
}
struct ListCell: View {
var item: Listable
var body: some View {
NavigationLink(destination: SecondaryListView(items: testSecondaryList)) {
Image(systemName: "photo")
VStack(alignment: .leading) {
Text(item.name)
.font(.title)
.fontWeight(.light)
Text(item.description)
}
}
}
}
let testList = [
Listable(),
Listable(),
Listable()
]
let testSecondaryList = [
Listable(),
Listable(),
Listable(),
Listable(),
Listable(),
Listable()
]
注意:如果我将SecondaryListView
中的列表
对象替换为ForEach
(如下所示),代码编译和运行时不会出现任何问题,我可以在堆栈中导航到我想要的任何位置
struct SecondaryListView: View {
var items: [Listable]
var body: some View {
ForEach(items) { item in
ListCell(item: item)
}
.navigationBarTitle(self.items[0].title)
}
}
是否不允许从列表视图中推送列表视图,或者这是一个错误?它可能会导致内存泄漏-我的主线程上的CPU达到99%。根本原因是我在SceneDelegate中修改了UITableView.appearance().backgroundView
。见以下代码:
SceneDelegate.swift:
UITableView.appearance().backgroundView = UIImageView(image: UIImage(named:"Background"), highlightedImage: nil)
我的目标是在应用程序中的所有UITableView中都有一个背景图像(SwiftUI中的列表仍然利用UIKit组件)。我解决的方法是使用UIColor init'd和图案图像设置背景色,如下所示:
UITableView.appearance().backgroundColor = UIColor(patternImage: UIImage(named:"Background") ?? UIImage())