繁体   English   中英

动态更改UIView框架

[英]Dynamically changing UIView Frame

我有这样一种情况:视图B框架取决于视图A框架。 我在玩viewA框架。 但是视图b框架不会更改,因为框架不是对象。 那么解决方法是什么,如果我需要将视图B框架更改为视图A框架,即当我更改视图A框架时视图B框架被更改

一种解决方案是add KVO用于View A ,因为它会notifyframe changed并根据changeframeview Achange frameview 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
 }
}

编辑neededRemove 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM