Ben*_*eny 8 scroll double-click swift wkwebview wkwebviewconfiguration
我有一个自定义键盘,带有宽度和高度的WKWebView.我已经禁用了滚动浏览器wkWebView!.scrollView.scrollEnabled = false但是我仍然在WKWebView底部双击时有一个奇怪的滚动行为.这里是我尝试加载的简单网页的源代码:http://is.gd/gt8h2q(非常简单,只是带有背景绿色和一行文本的div全屏).下面是GIF的解释.以下是我创建WKWebView的方法:
class KeyboardViewController: UIInputViewController, WKScriptMessageHandler {
var wkWebView: WKWebView?
override func loadView() {
super.loadView()
let contentController = WKUserContentController()
contentController.addScriptMessageHandler(self, name:"callbackTestOne")
let config = WKWebViewConfiguration()
config.userContentController = contentController
self.wkWebView = WKWebView(frame:self.view.frame, configuration:config)
self.view = self.wkWebView!
}
override func viewDidLoad() {
super.viewDidLoad()
(...)
wkWebView!.scrollView.bounces = false
wkWebView!.scrollView.scrollEnabled = false
wkWebView!.scrollView.backgroundColor = UIColor(red:248, green:248, blue:248, alpha:1)
wkWebView!.scrollView.opaque = true
wkWebView!.scrollView.showsHorizontalScrollIndicator = false
wkWebView!.scrollView.showsVerticalScrollIndicator = false
wkWebView!.scrollView.decelerationRate = UIScrollViewDecelerationRateNormal
}
(...)
Run Code Online (Sandbox Code Playgroud)
小智 9
我有类似的问题,并找到了解决方案.也就是说,删除负责不当行为的UITapGestureRecognizer.
WKWebView,或更确切地说是WKWebView中包含的UIScrollView及其子视图,添加了许多手势识别器.因此,您可以轻松地迭代视图中的所有识别器并删除所需的识别器.
如果要从webView中删除所有单指双击识别器,则需要在滚动视图的子视图内搜索.您可以执行以下操作:
// iterate over all subviews of the WKWebView's scrollView
for subview in _webView.scrollView.subviews {
// iterate over recognizers of subview
for recognizer in subview.gestureRecognizers ?? [] {
// check the recognizer is a UITapGestureRecognizer
if recognizer.isKind(of: UITapGestureRecognizer.self) {
// cast the UIGestureRecognizer as UITapGestureRecognizer
let tapRecognizer = recognizer as! UITapGestureRecognizer
// check if it is a 1-finger double-tap
if tapRecognizer.numberOfTapsRequired == 2 && tapRecognizer.numberOfTouchesRequired == 1 {
// remove the recognizer
subview.removeGestureRecognizer(recognizer)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这应该可以解决您的问题.
hacky和肮脏的解决方案。但至少它有效。只需将您自己的 UITapGestureRecognizer 添加到包含 WKWebView 的视图中,并使您的 UIViewController 委托给这个手势识别器。我使用了这个代码:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
if ([[otherGestureRecognizer description] containsString:@"WKSyntheticClickTapGestureRecognizer"] && [[otherGestureRecognizer description] containsString:@"numberOfTapsRequired = 2"]) {
[otherGestureRecognizer removeTarget:nil action:nil];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
更新 1 经过一些调查,我发现这种方法不太好。因为我们在长按菜单方面遇到了问题,尤其是在取消选择所选文本时。对我来说仍然存在问题 - 当菜单出现向左或向右轻轻滑动时长按 - 有时 WKWebView 可以开始滚动。下一个方法是为WKWebViewConfiguration设置WKSelectionGranularityCharacter - 这并不明显,我必须说(Apple 为什么你这样做?)所以它在 iOS8 上运行良好 - 没有双击,每个手势都可以正常工作。然而对于 iOS9 我们有坏消息 - http://www.openradar.me/23345435它坏了。于是继续调查。
Ste*_*ntz -2
假设您可以控制其中显示的内容WKWebView,则应该为其设置正确的视口。这很可能会禁用此行为。
怎么样:
<meta id="viewport" name="viewport"
content="width=device-width; user-scalable=false" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3176 次 |
| 最近记录: |