UIWebView高度自适应(基于KVO)

1.前言

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

2.知识铺垫

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

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

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

3.具体使用

主要代码

   #import <KVOController/KVOController.h>

  //...

   @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<NSString *,id> * _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的高度,这个方法怎么样呢,希望对你有所帮助!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,919评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,364评论 4 61
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,687评论 1 92
  • 胡姑娘阅读 1,450评论 0 1
  • 我们从来都是这样,不断的出发,不断的与自己重合,不断的分离,然后再次重合,一直都是这样,到最后才无法离开。 行走是...
    亦迁阅读 1,711评论 0 1

友情链接更多精彩内容