需求:一個底部UIScrollView色冀,上面是一個UIImageView潭袱,下面是一個UIWebView,要求加載完UIWebView锋恬,禁止UIWebView滾動屯换,UIWebView全部顯示,如果大于屏幕高度与学,UIScrollView滾動彤悔,否則不滾動
根據(jù)需求需要獲取UIWebView的實際高度,以便設置UIScrollView的contentSize
1加載webView
@property (nonatomic,strong) UIWebView *webView;
-(UIWebView *)webView {
if (!_webView) {
_webView = [[UIWebView alloc]initWithFrame:CGRectZero];
_webView.delegate = self;
_webView.scalesPageToFit = YES;
_webView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[_webView.scrollView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil];
}
return _webView;
}
2 當WebView加載完成后索守,禁止WebView滾動
#pragma mark - UIWebViewDelegate
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
webView.scrollView.scrollEnabled = NO;
}
3 KVO監(jiān)聽webView的contentSize變化晕窑,拿到實際高度,重置約束卵佛,設置UIScrollView的contentSize
#pragma mark - KVO
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"contentSize"]) {
CGPoint point = [change[@"new"] CGPointValue];
CGFloat height = point.y;
NSLog(@"point.y---%f",height);
CGSize fittingSize = [_webView sizeThatFits:CGSizeZero];
CGFloat webHeight = fittingSize.height;
[self.webView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.topView.mas_bottom);
make.left.right.equalTo(self.view);
make.height.mas_equalTo(webHeight);
}];
self.bgScrollView.contentSize = CGSizeMake(self.view.ssWidth, self.topView.ssHeight+webHeight);
}
}
大功告成杨赤,另外說一下為什么不在webViewDidFinishLoad中直接獲取webView高度,因為如果webView中加載的有圖片截汪,如果圖片顯示慢了疾牲,就可能在webViewDidFinishLoad中拿不到圖片高度,這樣拿到的高度有可能偏低衙解,所以我這里通過KVO拿webView高度阳柔,而不是在webViewDidFinishLoad中直接獲取