У меня проблема, что долгое нажатие и выбор текста в WKWebView случайным образом прокручивает веб-представление. Такое поведение происходит, когда я устанавливаю свойство contentInset.top
представления прокрутки веб-представления.
[Снимок экрана]
- Длительное нажатие на текст. Зеленая область — это нативный UIView https://ibb.co/P4LqgBB.
- После перетаскивания текста 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
не было установлено.
Кто-нибудь знает, как решить эту проблему?