本文中我是想让一个collectionview内容变化时高度跟随变化,第二步取值时是需要注意的
1.监听
[selectedColl addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil];
2.实现 observeValueForKeyPath方法
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
NSLog(@"keyPath:%@ object:%@ change%@ context%@", keyPath, object, change, context);
//NSConcreteValue
id value = [object valueForKey:keyPath];
NSAssert([value isKindOfClass:[NSValue class]],
@"监听到的value不是NSValue类型");
NSAssert(strcmp(@encode(CGSize), [value objCType]) == 0,
@"监听到的value不是CGSize类型");
//取出value
CGSize unwrappedValue;
[value getValue:&unwrappedValue];
selectedH.constant = unwrappedValue.height;
}
取值方法来自于https://stackoverflow.com/questions/4615966/what-is-an-nsconcretevalue-and-how-do-i-extract-its-value
3.页面销毁时移除监听
- (void)dealloc {
[selectedColl removeObserver:self forKeyPath:@"contentSize"];
NSLog(@"页面销毁");
}