Содержание в просмотре прокрутки как элемент списка исчезает при прокрутке (swiftui), почему? - PullRequest
3 голосов
/ 19 января 2020

Решение с помощью @Asperi, ScrollView (). Id (UUID (). UuidString).

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

Я думаю, что проблема связана с прокруткой и конфликтом многократно используемых элементов списка.

Если я удалю scrollview (просто hstack {}), ничего не исчезнет. Так что я думаю, что это проблема скроллвью. Какой идеал?

struct ContentView: View {
    var body: some View {
        List {
            ForEach(0...100, id: \.self) { _ in
                ItemView().padding()
            }
        }
    }
}

struct ItemView: View {
    var body: some View {
        VStack(alignment: .leading) {
            Text("Tag list:")
            ScrollView(.horizontal, showsIndicators: false) {
                HStack {
                    ForEach(0...8, id: \.self) { _ in
                        TagView1()
                    }
                }
            }.id(UUID().uuidString) /// <- fix
        }
    }
}

struct TagView1: View {
    var body: some View {
        Text("Tag\(String(UUID().uuidString.prefix(5)))")
            .foregroundColor(.secondary)
            .padding(.horizontal, 2)
            .background(RoundedRectangle(cornerRadius: 4).stroke(Color.secondary.opacity(0.5)))
            .padding(1)
    }
}

1 Ответ

10 голосов
/ 19 января 2020

Если я правильно понял, что исчезает (я предполагаю, что вы имели в виду строки списка при вертикальной прокрутке), то да, это связано с List проблемой повторного использования / оптимизации кэша.

Должен работать следующий подход (протестирован с Xcode 11.2 / iOS 13.2)

struct ItemView: View {
    var body: some View {
        VStack {
            Text("Tag list:")
            ScrollView(.horizontal, showsIndicators: false) {
                HStack {
                    ForEach(0...8, id: \.self) { _ in
                        TagView().padding()
                    }
                }
            }.id(UUID().uuidString) // << here is a fix !
        }
    }
}
...