Выдвижение нового списка из NavigationLink внутри списка останавливает симулятор / холст (SwiftUI) - PullRequest
0 голосов
/ 15 февраля 2020

При создании представления List, которое может содержать sh второстепенных List элементов, симулятор 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()
]

Примечание : если я заменим объект List в SecondaryListView на ForEach ( как показано ниже), код компилируется и запускается без проблем, и я могу перемещаться по стеку так, как мне бы хотелось.

struct SecondaryListView: View {
    var items: [Listable]
    var body: some View {
        ForEach(items) { item in
            ListCell(item: item)
        }
        .navigationBarTitle(self.items[0].title)
    }
}

Запрещено выдвижение представления списка из представления списка. или это ошибка? Возможно, это вызывает утечку памяти - процессор в моем основном потоке достигает 99%.

1 Ответ

0 голосов
/ 25 февраля 2020

Причиной root стало то, что я модифицировал UITableView.appearance().backgroundView в SceneDelegate. См. Ниже код:

SceneDelegate.swift:

UITableView.appearance().backgroundView = UIImageView(image: UIImage(named:"Background"), highlightedImage: nil)

Моя цель состояла в том, чтобы иметь фоновое изображение для всех UITableViews в приложении (списки в SwiftUI по-прежнему используют компоненты UIKit). Обходной путь, на котором я остановился, - вместо этого установить цвет фона с помощью UIColor init'd с изображением шаблона, как показано ниже:

UITableView.appearance().backgroundColor = UIColor(patternImage: UIImage(named:"Background") ?? UIImage())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...