【发布时间】:2021-10-13 03:09:33
【问题描述】:
我在 Swift 中成功地继承了 WKWwebView。但现在我也想在WKWebView 中继承UIScrollView。例如。我想做这样的事情(伪代码):
class CustomWKWebview : WKWebView {
override init(frame: CGRect, configuration: WKWebViewConfiguration) {
super.init(frame: frame, configuration: configuration)
self.scrollView = CustomScrollView // <-- this is what I want
}
}
虽然这似乎是不可能的,因为 self.scrollView 被 Apple 声明为只读。
还有其他方法可以在 WKWebView 中子类化滚动视图吗?
【问题讨论】:
-
为什么要继承一个 UIScrollView?
-
@Demented07 好问题!我必须覆盖
touchesBegan方法。我在 WKWebView 本身中做到了这一点,但为了让它工作,我必须这样做:self.scrollView.isUserInteractionEnabled = false这阻止了 scrollView 正常工作(因为你不能再滚动了)。因此,我想改为子类化 UIScrollView 并在那里收听触摸事件。 -
好吧,为什么你需要一个tapGestureRecignizer,你打算用它做什么? (我正在尝试查看是否可以解决您的问题)。
-
用例有点复杂。但我会尽力解释:我在 Swift 中有两个视图:一个 GMapView 和一个 WKWebView(使用 Capacitor.js 项目)。我想让 WKWebView 在 GMapView 之上。然后我使 WKWebView 透明,以便可以看到 GMapView。这样做的好处是我可以使用 WKWebView 中的 HTML 和 CSS 完全自定义 GMapView。但是,由于 WKWebView 现在位于顶部,因此它会捕获所有触摸事件。这意味着 GMapView 不会收到任何事件。为了解决这个问题,我想使用
touchesBegan并委托这些事件。 -
另外,您不必将 scrollView 子类化,您可以将其添加为子视图,例如 let scrollView: UIScrollView! 然后在 loadView 或其他一些适当的生命周期方法中创建子视图并将其作为子视图添加到视图中 scrollView = UIScrollView(frame: view.frame) 最后 view.addSubView(scrollView)
标签: ios swift uiscrollview wkwebview