UIWebView高度自适应(基于KVO)

1.前言

最近项目用到加载html文本,所以就想到了用webView来实现,用他来实现当然没有任何问题,直接一行代码就可以加载进来,刚开始高度是写死的UIScrollView里面嵌套了UIWebView,体验不是太好,两块区域滑动。后来想到让webView高度自适应好了,查资料后感觉用KVO解决应该是最好的方法,所以就用KVO来解决了。

2.知识铺垫

  • KVO:KVO 作为 iOS 中一种强大并且有效的机制,我们可以使用 KVO 来检测对象属性的变化、快速做出响应,这能够为我们在开发强交互、响应式应用以及实现视图和模型的双向绑定时提供大量的帮助。
    但是KVO的使用有太多的不便利,使用 KVO 时,既需要进行注册成为某个对象属性的观察者,还要在合适的时间点将自己移除,再加上需要覆写一个又臭又长的方法,并在方法里判断这次是不是自己要观测的属性发生了变化

  • 解决:如何优雅地解决上一节提出的几个问题呢?我们在这里只需要使用 Facebook 开源的 KVOController 框架就可以优雅地解决这些问题了。

  • 具体参考如何优雅地使用KVO

3.具体使用

主要代码

   #import 

  //...

   @property (nonatomic, strong) UIScrollView *mScrollView;
   @property (nonatomic, strong) UIWebView *mWebView;
   @property (nonatomic, strong) FBKVOController *kvoController;

  //...

    _mScrollView = [[UIScrollView alloc] init];
    _mScrollView.delegate = self;
    _mScrollView.contentSize = CGSizeMake(ScreenWidth, ScreenHeight);
    [self.view addSubview:_mScrollView];
 
    _mWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 390, ScreenWidth, 100)];
    _mWebView.delegate = self;
    _mWebView.scalesPageToFit = YES;//自动缩放
    _mWebView.opaque = NO;
    _mWebView.backgroundColor = [UIColor whiteColor];
    _mWebView.userInteractionEnabled = NO;//禁止交互,如果可以缩放拉大的话,会影响高度
    [_mScrollView addSubview:_mWebView];

/***webView高度自适应***/
    __weak typeof (self) weakSelf = self;
    //KVO
    self.kvoController = [FBKVOController controllerWithObserver:self];
    [self.kvoController observe:_mWebView.scrollView keyPath:@"contentOffset" options:NSKeyValueObservingOptionNew block:^(id  _Nullable observer, id  _Nonnull object, NSDictionary * _Nonnull change) {
        
        //获取尺寸
        CGSize fitSize = [_mWebView sizeThatFits:CGSizeZero];
        
        weakSelf.mScrollView.contentSize = CGSizeMake(ScreenWidth, fitSize.height + 390);
        
        CGRect rect = weakSelf.mWebView.frame;
        rect.size.height = fitSize.height;
       //重新设置高度
        weakSelf.mWebView.frame = rect;
    }];
//网络获取的html
 [_mWebView loadHTMLString:_model.descri baseURL:nil];

4.总结

用KVO实时监听高度的变化然后动态改变webView的高度,这个方法怎么样呢,希望对你有所帮助!

你可能感兴趣的:(UIWebView高度自适应(基于KVO))