美文网首页
KVO监测对象属性的改变

KVO监测对象属性的改变

作者: zhouios | 来源:发表于2016-09-30 14:41 被阅读0次

在编程中,有时候我们需要监测一个对象的属性的变化,那么用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));
        
    }
}

相关文章

  • KVO监测对象属性的改变

    在编程中,有时候我们需要监测一个对象的属性的变化,那么用KVO很方便;例如:动态获取UIWebView高度;有这样...

  • KVO

    KVO监听对象的属性值改变。不能用于输入框的实时输入监测。 #import

  • 手动触发KVO

    KVO中,当被观察的属性改变时,KVO被触发。举例如下:KVO监测Person类实例person的name属性。当...

  • iOS KVO

    什么是KVO KVO俗称“键值监听”,用来监听某个对象属性值的改变 KVO的使用 KVO 本质 在给某个对象添加K...

  • OC底层原理学习笔记(二)- KVO、KVC的本质

    一、KVO 1、KVO实现属性监听的原理KVO俗称“键值监听”,可以用于监听某个对象属性值的改变未使用KVO监听的...

  • KVO用法简介及原理

    KVO简介 KVO全称Key-Value Observing(键值监听),当前对象某个属性值发生改变时,监听该属性...

  • (一)OC语法02(KVO与KVC)

    1、KVO KVO的作用是监听对象的属性的改变。重点之一就是必须是触发了属性的setter方法才会触发KVO,只是...

  • KVO使用和原理

    KVO是OC中观察者模式的一种实现,一个对象监测另一对象某属性是否发生变化,当被观察者某个属性发生改变时,会触发观...

  • KVO、KVC 原理

    KVO 原理 KVO 全称Key-Value Observing,俗称"键值监听",可以用于某个对象属性值得改变 ...

  • KVO(iOS)

    KVO == Key Value Observing 1. KVO的作用: 可以监听某个对象属性的改变 2. KV...

网友评论

      本文标题:KVO监测对象属性的改变

      本文链接:https://www.haomeiwen.com/subject/olwtyttx.html