以编程方式启用/禁用捏合以放大 WKWebView 和 viewForZoomingInScrollView

Posted

技术标签:

【中文标题】以编程方式启用/禁用捏合以放大 WKWebView 和 viewForZoomingInScrollView【英文标题】:Programatically enable/disable pinch to zoom on WKWebView and viewForZoomingInScrollView 【发布时间】:2016-04-12 18:22:14 【问题描述】:

我有一个 WKWebView,我想以编程方式启用/禁用双指缩放。

当我想启用双指缩放时,我应该返回什么?

wkWebView!.scrollView 与

中断

'viewForZoomingInScrollView返回的视图:必须是子视图 的滚动视图。它不能是滚动视图本身。'

func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? 

  if pinchToZoom 
    return ???
   else 
    return nil
  

【问题讨论】:

【参考方案1】:
if (pinchToZoom)

    for (UIView *subScrollView in [scrollView subviews])
    
        if ([subScrollView isKindOfClass:NSClassFromString(@"WKContentView")])
        
            return subScrollView;
        
    

    return nil;

else

    return nil;

【讨论】:

这使用私有 API,可能会导致 Apple 拒绝您的应用。【参考方案2】:

我的解决方案是仅在禁用缩放时将self 设置为webView.scrollView 的委托,如果启用缩放,则将其重置为nil

var pinchToZoom: Bool 
    didSet 
        // only set self as delegate when disabling zoom
        webView.scrollView.delegate = pinchToZoom ? nil : self
    


func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? 
    return nil

这样,一旦设置了pinchToZoom,代理就会更新以启用/禁用缩放。不需要私有 API。希望这会有所帮助!

【讨论】:

以上是关于以编程方式启用/禁用捏合以放大 WKWebView 和 viewForZoomingInScrollView的主要内容,如果未能解决你的问题,请参考以下文章

在 UIWebView 上启用缩放/捏合

以编程方式禁用/启用通知

以编程方式禁用/启用网络接口

如何在 Swift 中以编程方式启用/禁用菜单对象

如何以编程方式禁用/启用UIBarButtonItem

如何在 iOS 中以编程方式禁用/启用睡眠模式?