Прозрачный вид, охватывающий WKWebView в ZStack, для обнаружения жестов касания и длительного нажатия
В моем приложении SwiftUI есть список WebView.
WebView называется ItemWebView и представляет собой адаптацию WKWebView к представлению SwiftUI (доступны учебные пособия или ответы по созданию такого представления).
Я пробовал много возможных решений, включая onTapGesture, onLongPressGesture, parallelousGesture, on Button или в самом WebView, а также Stack Views и Spacers.
Тот, который вроде работал, был
ZStack{
ItemWebView(htmlText:html)
Text("TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT").lineLimit(1).opacity(0.1)
.simultaneousGesture(
LongPressGesture()
.onEnded { _ in
//handle longpress
}
)
.highPriorityGesture(TapGesture()
.onEnded { _ in
//handle tap
})
}
Он работает для значений непрозрачности, превышающих нижний предел. Я не знаю точного предела, но 0,1 работает, а 0,01 или 0,0 не работают, то есть WebView полностью виден, а текст прозрачен, но события мыши не запускаются должным образом.
Я мог проверить это на симуляторе iOS.
Я имею в виду, что оба жеста должны быть обнаружены, касание и долгое нажатие, но предыдущие решения просто работали для одного из них или позволяли пользователю выбирать текст внутри WebView с длительным нажатием, несмотря на то, что pointerEvents='none' был в HTML.
Я хотел бы иметь полностью прозрачный вид поверх WebView (в ZStack) с тем же размером WebView, чтобы заменить текст, который вы видите в приведенном выше примере, чтобы оба жеста были обнаружены.