Подтвердить что ты не робот

SWIFT - события прокрутки HTML в WKWebView, которые внутри ScrollView

У меня есть веб-страница для тестирования (https://storage.googleapis.com/htmltestingbucket/nested_scroll_helper.html), которая просто печатает счетчик события прокрутки, который html обнаружил в фиксированном заголовке

Когда WKWebView является единственным прокручиваемым элементом во фрагменте, все в порядке, и WebView отправляет события прокрутки на страницу

Если я хочу добавить собственные элементы выше и ниже WebView, тогда все становится намного сложнее.

UIScrollView  
    UILabel
    WKWebView
    UILabel

Я знаю, что не хорошо иметь WebView внутри ScrollView, но я должен предоставить единый прокручиваемый опыт с гибридным контентом и соответствующими прокручивающими событиями в html-документе. Я нашел много вопросов по этому вопросу, но я не смог создать полное сквозное решение.

4b9b3361

Ответ 1

Update: Хорошо, я понял, что вы пытаетесь сделать.

Я знаю, что вы хотите сохранить внешний scrollView, но я уверен, что невозможно достичь того, что вы хотите сделать (только способ может быть, если вы установите outerScrollView.delegate = webView - но не работает для меня когда я пытался)

Я думаю, что лучшим решением было бы следующее:

  • удалите внешний scrollView
  • установите contentInsets для вашего веб-браузера на любую высоту сверху и снизу, в которой вы нуждаетесь. Например. для 100pt: webView.contentInset = UIEdgeInsetsMake(100,0,100,0);
  • Добавьте UIElements как subView в UIWebView вместо UIScrollView (в основном в свободное место, которое вы создали с помощью своих вложений)

Ранее (другой способ):

  • установить ограничение высоты вашего UIWebView
  • сохранить ограничение по высоте как IBOutlet в вашем UIViewController
  • установите webView.scrollView.scrollEnabled = NO; в viewDidLoad или раскадровку
  • как только загрузится webView, извлеките его высоту содержимого webView.scrollView.contentSize.height
  • обновить ограничение высоты UIWebView со значением it s content height via self.webViewContentHeightConstraint.constant = webView.scrollView.contentSize.height
  • call [self.scrollView layoutIfNeeded]; чтобы убедиться, что ваш просмотр снова отображается.

Не забудьте сделать шаги 4 и 5 всякий раз, когда webView закончил загрузку содержимого

введите описание изображения здесь

Ответ 2

У вас в основном scrollview внутри scrollview. Как вы думаете, что это сработает? Я бы добавил метки в HTML в WebView. Не видите причин, по которым они должны быть родными.

В качестве альтернативы вы можете попытаться добавить метки в UIWebView UIScrollView. То, что он сначала подсматривает. Не уверен, что вам нужно настроить вставки scrollview. Вероятно, инъекция html будет работать более надежно.