UI效果iOS学习iOS开发

UIWebView高度自适应(基于KVO)

2017-04-05  本文已影响180人  calary

1.前言

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

2.知识铺垫

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

上一篇下一篇

猜你喜欢

热点阅读