WKWebView长按文本选中失效问题求助:原UIWebView功能正常
根据你提供的代码和CSS配置,我整理了几个可能导致长按选中文本失效的关键点,你可以逐一排查:
1. 重复加载内容导致的交互状态异常
你同时调用了loadFileURL:allowingReadAccessToURL:和loadHTMLString:baseURL:这两个加载方法,这会导致后一个加载请求直接覆盖前一个,WKWebView在这种中断性的加载过程中,可能会出现手势识别器没有正确初始化的情况,进而影响文本选中功能。
建议你只保留其中一个加载方法:如果是本地HTML文件,优先使用loadFileURL;如果是字符串内容,就只用loadHTMLString,避免重复加载干扰WebView的正常初始化。
2. CSS多列布局的兼容性问题
你的CSS中使用了-webkit-column-width:668px和-webkit-column-gap:100px这类多列布局属性,WKWebView在处理固定列宽的多列文本时,偶尔会出现文本选中手势失效的兼容性问题。
你可以临时注释掉这些列相关的CSS属性,测试文本选中功能是否恢复正常。如果恢复了,那可以尝试调整列布局的实现方式,比如改用自适应的列宽,或者通过JS辅助处理选中逻辑。
3. 视图层级与配置的潜在冲突
虽然你已经设置了userInteractionEnabled = true和multipleTouchEnabled = true,但可以再检查以下几点:
- 确认
readWKWebView.scrollView的userInteractionEnabled没有被意外设置为NO; - 检查是否有其他叠加在WKWebView上的子视图(比如遮罩层、自定义工具栏等),这些视图如果
userInteractionEnabled为YES,会拦截长按手势,导致WebView无法响应。
4. CSS固定尺寸的限制影响
你的#book和#viewer设置了固定的height:730px,如果文本内容超出这个高度,固定高度可能会让WKWebView的文本渲染区域出现异常,间接影响选中逻辑。可以尝试去掉固定高度,改用自适应高度测试。
你可以先从第一个点(重复加载)开始排查,这个是最常见的导致WebView交互异常的原因,排查起来也最简单。
内容的提问来源于stack exchange,提问作者coder

