WKWebView странное поведение прокрутки при длительном нажатии, чтобы выбрать текст, если установлен contentInset - PullRequest
0 голосов
/ 01 апреля 2019

У меня проблема с тем, что длительное нажатие и выбор текста в WKWebView будет случайным образом прокручивать веб-просмотр.Это происходит, когда я устанавливаю свойство contentInset.top представления прокрутки веб-представления.

[Снимок экрана]

  1. Длительное нажатие на текст.Зеленая область является собственным UIView https://ibb.co/P4LqgBB
  2. После перетаскивания текста WKWebView неожиданно прокручивает себя вниз https://ibb.co/r5KR4JB

Так как моему приложению необходимо показать собственный вид надзелье веб-просмотра, такое поведение действительно расстраивает моих пользователей, когда им нужно копировать и вставлять текст из веб-представления.

Ниже приведен минимальный код, который можно использовать для воспроизведения проблемы.Я попробовал это на iPhone 8 iOS 12.2, используя Xcode 10.2.Проблема возникает, когда установлено webView.scrollView.contentInset.top = 100.Более того, если вы измените значение на что-то вроде 1000, где contentInset.top длиннее, чем размер экрана телефона, длительное нажатие приведет к мгновенной прокрутке веб-вида.

 override func viewDidLoad() {
        super.viewDidLoad()

        // Create WKWebView
        let webView = WKWebView(frame: .zero)
        webView.translatesAutoresizingMaskIntoConstraints = false
        webView.scrollView.contentInsetAdjustmentBehavior = .never
        webView.clipsToBounds = false
        webView.scrollView.bounces = false

        // Create Native UIView
        let nativeView = UIView(frame: .zero)
        nativeView.translatesAutoresizingMaskIntoConstraints = false
        nativeView.backgroundColor = .green

        // Add WebView to the view
        view.addSubview(webView)

        webView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        webView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
        webView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
        webView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true

        // Set contentInset to give blank space for native view
        webView.scrollView.contentInset.top = 100

        // Add the native view as webView scrollView's child
        webView.scrollView.addSubview(nativeView)
        nativeView.leadingAnchor.constraint(equalTo: webView.leadingAnchor).isActive = true
        nativeView.trailingAnchor.constraint(equalTo: webView.trailingAnchor).isActive = true
        nativeView.topAnchor.constraint(equalTo: webView.scrollView.topAnchor,
                                        constant: -100).isActive = true
        nativeView.heightAnchor.constraint(equalToConstant: 100).isActive = true

        // Load the webpage
        let url = URL(string: "https://www.apple.com")!
        let request = URLRequest(url: url)
        webView.load(request)
    }

Я ожидаюдлительное нажатие и прокрутка ведут себя так, как будто contentInset.top не установлен.

Кто-нибудь знает, как решить эту проблему?

1 Ответ

0 голосов
/ 01 апреля 2019

WKWebView создает много проблем, если CSS не достаточно чист.

Я рекомендую вернуться к UIWebView, он должен решить все ваши проблемы

...