SwiftUI список не показывает все элементы - PullRequest
1 голос
/ 22 января 2020

Я пытаюсь показать список боковой прокрутки в iOS. Некоторые списки показывают, но другие нет, хотя у них всех есть данные. Я ставлю точку отладки и вижу, что ForEach с EventItemView вызывается для каждого раздела. Я не уверен, что делаю неправильно.

EventScreen

struct EventScreen: View {

    @State
    var currentPage: Int = 0

    var viewControllers =
        IncentiveSource().getFeaturedIncentives().map({ incentive in
            UIHostingController(rootView: EventFeatureView(event: incentive.toEvent()))
        })

    var response: [EventSection] = IncentiveSource().getIncentives().sections.toEventSections()


    var body: some View {
            NavigationView {
                List {
                    EventViewController(controllers: self.viewControllers, currentPage: self.$currentPage)
                        .listRowInsets(EdgeInsets())
                        .frame(height: 600)
                    ForEach(self.response) { section in
                        EventSectionView(eventSection: section)
                    }
                }
                .navigationBarTitle(Text("Events").foregroundColor(Color.black), displayMode: .inline)
            }


    }
}

EventSectionView

struct EventSectionView: View {

    var eventSection: EventSection

    var body: some View {
        VStack(alignment: .leading) {
            SectionTextView(text: eventSection.category.typeName())
                .frame(alignment: .leading)
            ScrollView(.horizontal, showsIndicators: true) {
                HStack(alignment: .top, spacing: 0) {
                    ForEach(self.eventSection.events) { event in
                        EventItemView(event: event)
                    }
                }
            }
        }
    }
}

struct SectionTextView: View {
    var text: String
    var body: some View {
        return Text(text)
        .bold()
            .font(.system(size: 18, weight: .heavy))
            .foregroundColor(Color(ColorTheme.brandBlue.value))
            .padding(.bottom, 4)
    }
}

EventItemView

struct EventItemView: View {
    var event: Event
    var body: some View {
        VStack {
            Color.red
                .frame(width: 100, height: 100, alignment: .center)
                .cornerRadius(5)
            Text(event.title)
            .bold()
                .frame(width: 100, alignment: .leading)
                .foregroundColor(.white)
                .font(.system(size: 10))
            Text(event.date)
                .frame(width: 100, alignment: .leading)
                .foregroundColor(.white)
                .font(.system(size: 10))
        }
        .padding(.trailing, 8)
    }
}

Screenshot

1 Ответ

0 голосов
/ 22 января 2020

Необходимо сделать каждый горизонтальный скроллер в EventSectionView уникальным, как показано ниже

struct EventSectionView: View {

    var eventSection: EventSection

    var body: some View {
        VStack(alignment: .leading) {
            SectionTextView(text: eventSection.category.typeName())
                .frame(alignment: .leading)
            ScrollView(.horizontal, showsIndicators: true) {
                HStack(alignment: .top, spacing: 0) {
                    ForEach(self.eventSection.events) { event in
                        EventItemView(event: event)
                    }
                }
            }.id(UUID().uuidString() // << unique
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...