单击 UICollectionView 单元格中的 WKWebView 会导致未调用回调
Click on WKWebView in a UICollectionView cell causes callback not being called
我有一个当时显示一个 page/cell 的 UICollectionView,已启用分页。单元格是自定义的,它们包含用于图像的 scrollView 作为上半部分和 WebView 作为下半部分。 WebView 包含带有一些 linked 单词的文本,link 单击时会打开覆盖下半部分的模态 textView。
首先我遇到了一个问题,当 webView(而且只是 webView)被点击(任何地方不只是 link 字)并且当我想滑到另一个页面时,下一个 page/cell 是黑色(颜色collectionView.backgroundColor
) 但当打印时 collectionView.visibleCells
它存在。后来从坐标中我发现第二个单元格的坐标与第三个单元格的坐标相同。
我遵循了这个答案,因为他有同样的问题并设置
collectionView.isPrefetchingEnabled = false
它修复了空白页,但又出现了另一个问题。
现在,当我单击 webView 时,该单元格的行为就像它已从集合中删除一样,我可以单击页面并获得响应,除了调用 collectionView 回调方法 none 之外的所有内容,当我来时也不会调用 willDisplay回到那个页面,滑出的时候也没有EndDisplaying
当页面不可见时,如果打开,我需要关闭模态 textView。
当我点击 scrollview/imageView 然后滑动一切正常。
如果我点击其他页面上的 webView,第一个开始反应。
问题出在 webView 的内存周期上。它使不可见的单元格保持活动状态,因此不会激活回调方法。所以我想打破 webView 内存引用,但我把 webView 作为第一响应者放在 willDisplay 单元格回调上。我想它覆盖了以前的 webView 参考,现在一切正常,即使 collectionView.isPrefetchingEnabled = true
.
func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
if let cell = cell as? CustomViewCell {
cell.webView.becomeFirstResponder()
}
}
我有一个当时显示一个 page/cell 的 UICollectionView,已启用分页。单元格是自定义的,它们包含用于图像的 scrollView 作为上半部分和 WebView 作为下半部分。 WebView 包含带有一些 linked 单词的文本,link 单击时会打开覆盖下半部分的模态 textView。
首先我遇到了一个问题,当 webView(而且只是 webView)被点击(任何地方不只是 link 字)并且当我想滑到另一个页面时,下一个 page/cell 是黑色(颜色collectionView.backgroundColor
) 但当打印时 collectionView.visibleCells
它存在。后来从坐标中我发现第二个单元格的坐标与第三个单元格的坐标相同。
我遵循了这个答案,因为他有同样的问题并设置
collectionView.isPrefetchingEnabled = false
它修复了空白页,但又出现了另一个问题。
现在,当我单击 webView 时,该单元格的行为就像它已从集合中删除一样,我可以单击页面并获得响应,除了调用 collectionView 回调方法 none 之外的所有内容,当我来时也不会调用 willDisplay回到那个页面,滑出的时候也没有EndDisplaying
当页面不可见时,如果打开,我需要关闭模态 textView。
当我点击 scrollview/imageView 然后滑动一切正常。
如果我点击其他页面上的 webView,第一个开始反应。
问题出在 webView 的内存周期上。它使不可见的单元格保持活动状态,因此不会激活回调方法。所以我想打破 webView 内存引用,但我把 webView 作为第一响应者放在 willDisplay 单元格回调上。我想它覆盖了以前的 webView 参考,现在一切正常,即使 collectionView.isPrefetchingEnabled = true
.
func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
if let cell = cell as? CustomViewCell {
cell.webView.becomeFirstResponder()
}
}