美文网首页iOS开发
WKWebView的位置问题

WKWebView的位置问题

作者: Mrfengzi | 来源:发表于2019-11-20 16:03 被阅读0次

    最近项目把UIWebView替换成WKWebView,其他的都还挺顺利基本上资料还都挺全的,不过发现一个问题:当实现webView的ScrollowView的

    • (void)scrollViewDidScroll:(UIScrollView *)scrollView
      代理的时候,发现网页滑动的时候屏幕之外的地方都是白屏闪现,感觉渲染出现问题,就去网上查了好久,发现这个问题的资料好少。最后看到一篇文章分析的挺好
      https://www.jianshu.com/p/1d739e2e7ed2
      感觉问题相似就想直接使用他的这个方法
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wundeclared-selector"
        if ([[self respondsToSelector:@selector(_updateVisibleContentRects)]) {
            ((void(*)(id,SEL,BOOL))objc_msgSend)([self,@selector(_updateVisibleContentRects),NO);
        }
    #pragma clang diagnostic pop
    ..........
    }
    

    但是还是怕使用私有API被拒。
    也想到直接使用

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView{
        [self setNeedsLayout];
        ..........
    }
    

    但是发现使用之后webView的上拉下拉效果失效,也怕影响性能
    最后还是多改几行代码使用KVO监控scrollView(明明打印的self.scrollView.bounces一直是YES,有时间研究下webView的弹簧效果为啥失效)

    NSString *const TPKeyPathContentOffset = @"contentOffset";
    
    NSKeyValueObservingOptions options = NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld;
     [self.scrollView addObserver:self forKeyPath:TPKeyPathContentOffset options:options context:nil];
    
    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
    {
        if ([keyPath isEqualToString:TPKeyPathContentOffset]) {
                }
        }
    }
    
    -(void)dealloc
    {
        [self.scrollView removeObserver:self forKeyPath:TPKeyPathContentOffset];
    }
    
    

    由于我粘贴的代码是项目中WKWebView的封装,本文中self都是指WKWebView

    相关文章

      网友评论

        本文标题:WKWebView的位置问题

        本文链接:https://www.haomeiwen.com/subject/fzvoictx.html