События прокрутки списка блокировки наложения SwiftUI - PullRequest
2 голосов
/ 28 мая 2020

Я хотел бы поместить полупрозрачное наложение изображения поверх списка в SwiftUI. Я пробовал такой код:

struct ContentView: View {
    var body: some View {
        List {
            Text("first")
            Text("second")
            Text("third")
        }
        .overlay(
            Image(systemName: "hifispeaker")
                .resizable()
                .frame(width: 200, height: 200)
                .opacity(0.15)
        )
    }
}

Выглядит так, как ожидалось, но если вы поместите палец в пределах границ изображения, прокрутка списка не сработает (если вы попытаетесь прокрутить за пределы изображения работает нормально)

Я пытался добавить .allowsHitTesting(false) сразу после непрозрачности, но это ничего не меняет.

Использование ZStack вместо overlay не помогает слишком. Единственный обходной путь, который я нашел, - это использовать ZStack, поместить изображение за списком и сделать список полупрозрачным, но это не то решение, которое я ищу (оно слегка меняет цвета списка и вызывает некоторые проблемы с анимацией).

есть способ заставить его работать? Например, заставлять изображение передавать события в список в фоновом режиме или что-то в этом роде.

1 Ответ

1 голос
/ 29 июля 2020

Это определенно похоже на ошибку SwiftUI. Я столкнулся с той же проблемой и смог найти обходной путь.

struct ContentView: View {
    var body: some View {
        List {
            Text("first")
            Text("second")
            Text("third")
        }
        .overlay(
            ScrollView {
                Image(systemName: "hifispeaker")
                    .resizable()
                    .frame(width: 200, height: 200)
                    .opacity(0.15)
            }
            .frame(width: 200, height: 200)
            .disabled(true)
        )
    }
}

При встраивании оверлея в ScrollView с модификатором .disabled(true) жесты передаются в список должным образом, и прокрутка не блокируется.

...