Xcode 如何检测视图的属性已更改?

Xcode how to detect a view's properties changed?

如何检测视图的 x、y、宽度或高度已更改?

我想实现一旦一个视图的属性发生变化,另一个视图的位置就会重新组织。

例如,我有一个具有动态高度的网络视图。每次 webViewDidFinishLoad 我都会改变 webView 的高度,然后其他视图的位置将根据 webview.frame.

我一直在考虑更改委托函数 webViewDidFinishLoad 中所有视图的位置。但是我的观点太多了。

我想知道我是否可以使用“Key-Value Observing”实现此行为

如果可以,如何实现。

//added KVO for webview
[webview addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionOld context:NULL];  

//when observer changed would call:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if([keyPath isEqualToString:@"frame"]) {
        //do something
        NSLog(@"new:%@",[change objectForKey:NSKeyValueChangeNewKey]);
        NSLog(@"old:%@",[change objectForKey:NSKeyValueChangeOldKey]);
    }
}

//when you don't need kvo, remove observer
[webview removeObserver:self forKeyPath:@"frame"];

keyPath
The key path, relative to the receiver, of the property to observe. This value must not be nil.

change
A dictionary that describes the changes that have been made to the value of the property at the key path keyPath relative to object.

您可以使用 DelegateNSNotificationCenter 将值推送到持有其他视图的控制器。

希望这对您有所帮助。