KVO监测对象属性的改变

在编程中,有时候我们需要监测一个对象的属性的变化,那么用KVO很方便;例如:动态获取UIWebView高度;
有这样一个需求,需要将web与原生的UI搭载在一起,一般的情况下,web的高度肯定是不够的,如果原生的 UI是一个 ScrollView,高度也是不定的,那放在一起的话就会有两个 ScrollView 分别滚动,那么这样的效果是很差的;
那么解决的办法就是,web设置为不滚动,而原生的UI设置滚动,那么web的高度就要设置为web的内容的高度。这是一个我在cocoachina上放的demo,它就是这种的需求, http://code.cocoachina.com/view/133096
下面介绍使用KVO解决这种需求,(主要是解决动态拿到web的内容的高度),假如创建的UIWebView的对象是webView

 //监听webView的contentSize属性变化
 [webView.scrollView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil];

/**
 webView的contentSize变化的时候,就回调用这个方法
 */
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
{
    if ([keyPath isEqualToString:@"contentSize"]) {
        
        CGFloat height = [[self.webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"] floatValue];
        
        //把webView的高度设置成网页内容的高度
        self.webView.frame = CGRectMake(0, CGRectGetMaxY(self.headerView.frame), self.scrollView.bounds.size.width, height);
        
        //设置scrollView的滚动范围
        self.scrollView.contentSize = CGSizeMake(0, height+CGRectGetMaxY(self.headerView.frame));
        
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,276评论 4 61
  • 我们从小生活在一个为什么的世界。为什么太阳是圆的,为什么天要下雨,为什么一天有二十四个小时等等。我们的父母亲也会给...
    哈村de冬天阅读 289评论 0 0
  • 曾几何时, 当年的故事,我讲的断断续续,如今想来竟然忘了许多,可我总记得你认真去听的样子,晚上的灯光在墙上打出我们...
    樱之熙阅读 426评论 2 3
  • 那天,看到了你的笑颜 那刻,你住进了我心间 某晚,我梦见了谁容颜 某天,不安的到你身前 曾何几时 我和你相...
    梦虫梦语阅读 226评论 0 1
  • 哈喽(๑•ั็ω•็ั๑)我的小公举(๑•ั็ω•็ั๑)午好呀。我现在在广播台审稿子(๑•ั็ω•็ั๑),想休...
    PImonsterNK阅读 501评论 0 1