[英]Dynamically changing UIView Frame
我有这样一种情况:视图B框架取决于视图A框架。 我在玩viewA框架。 但是视图b框架不会更改,因为框架不是对象。 那么解决方法是什么,如果我需要将视图B框架更改为视图A框架,即当我更改视图A框架时视图B框架被更改
一种解决方案是add KVO
用于View A
,因为它会notify
时frame changed
并根据change
的frame
的view A
, change
frame
的view B
[A addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionOld context:NULL]; //added KVO for View A
方法将是:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if([keyPath isEqualToString:@"frame"]) {
//change frame of View B according to View A
}
}
编辑 : needed
时Remove observer
[A removeObserver:self forKeyPath:@"frame"];
在> iOS6中,您可以尝试设置一些自动布局约束,或尝试以下方式:
[self addObserver:self forKeyPath:@"viewA.frame" options:NSKeyValueObservingOptionOld context:NULL];
确保在dealloc上移除removeObserver。 然后,您将发现viewA框架何时发生更改,并且可以实现任何操作集以及viewA和viewB框架之间的任何功能关系...
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if([keyPath isEqualToString:@"viewA.frame"]) {
// change viewB's frame according to viewA's frame
viewB.frame = CGRectOffset(viewA.frame, 20.0, 20.0);
}
}
相对于视图A设置视图B框架。 编写方法-(void)ResizeFrame
并将所有框架设置放入其中,并在需要更改框架时调用此函数。 即ViewB.frame=[ViewA.frame.origin.x,ViewA.frame.origin.y,ViewA.frame.size.width/2,ViewA.frame.size.height/2];
在这里我给了划分,你可以相应地改变它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.