Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从列表中的NavigationLink推送新列表会冻结模拟器/画布(SwiftUI)_Swift_Xcode_Swiftui - Fatal编程技术网

从列表中的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())