Как отобразить текстовое сообщение в центре представления, когда источник данных списка пуст в SwiftUI?

struct LandmarkList: View {
    var body: some View {
        NavigationView {
            List(landmarkData) { landmark in
                LandmarkRow(landmark: landmark)
            }
        }
    }
}

Я хочу отображать сообщение в центре представления, когда представление списка (представление таблицы) пусто. Как лучше всего добиться этого в SwiftUI. Правильный ли подход - проверка количества источников данных в onAppear и установка какого-то значения Bool?


person subin272    schedule 28.03.2020    source источник


Ответы (2)


Я бы просто попробовал оператор if else. Если наземные ориентиры равны нулю или count = 0, показать текст. Иначе покажите список.

person Volker88    schedule 28.03.2020

Если вы хотите, чтобы ваше сообщение имело такое же поведение, как и элемент списка, используйте ScrollView и GeometryReader.

Вставьте состояние условия в Group, чтобы NavigationView отображался в любом случае.

Не забудьте изменить цвет фона и игнорировать безопасную область для большего сходства со списком.

struct LandmarkList: View {
    var body: some View {
        NavigationView {
            Group {
                if landmarkData.isEmpty {
                    GeometryReader { geometry in
                        ScrollView {
                            Text("Your message!")
                                .multilineTextAlignment(.center)
                                .padding()
                                .position(x: geometry.size.width/2, y: geometry.size.height/2)
                        }
                    }
                    .background(Color(UIColor.systemGroupedBackground))
                } else {
                    List(landmarkData) { landmark in
                        LandmarkRow(landmark: landmark)
                    }
                }
            }
            .ignoresSafeArea()
            .navigationTitle("Title")
        }
    }
}

Вы также можете использовать @ViewBuilder для отображения пустого состояния в списке, как это предлагается в этом ответе.

person Iaenhaall    schedule 22.12.2020