如何监听WKWebView的Zoom in/out事件

How to listen Zoom in/out event of WKWebView

我想 hide/show UINavigationController 的 navigationBar 当 WKWebView 缩放时 out/in。

隐藏或显示 UINavigationBar 非常简单,如下所示:

self.navigationController?.navigationBarHidden = true

但问题是我不知道把代码放在哪里。

我想拦截WKWebView的缩放事件。可能还有其他方法,欢迎大家评论。

每个 WKWebView 都有一个 scrollView 属性 允许您访问 Web 视图的 UIScrollView 部分。您可以使用 UIScrollViewDelegate 方法,scrollViewDidScroll 在 Web 视图滚动时获取回调。

首先,设置滚动视图委托:

let webView = WKWebView(...)
webView.scrollView.delegate = self

然后,实现委托方法scrollViewDidScroll并添加隐藏和显示导航栏的逻辑:

extension YourClass: UIScrollViewDelegate {

    func scrollViewDidScroll(scrollView: UIScrollView) {
        // you can use the position of the scrollView to show and hide your nav bar here
    }
}

我找到了另一种实现方式:

self.navigationController?.hidesBarsOnSwipe = true

iOS 8.0 为 UINavigationController 提供了一个简单的 属性 来掩盖一些复杂的行为。如果您将任何 UINavigationController 的 hidesBarsOnSwipe 设置为 true,那么 iOS 会自动将点击手势识别器添加到您的视图以根据需要处理隐藏(和显示)导航栏。这意味着您只需一行代码即可模仿 Safari 的导航栏行为。