1

我有这样的场景:视图 B 框架取决于视图 A 框架。我正在玩 viewA 框架。但是视图 b 框架不会改变,因为框架不是对象。那么解决方法是什么,如果我需要将 View B 框架更改为 View A 框架,即当我更改 ViewA 框架时,视图 B 框架会发生变化

4

3 回答 3

1

一种解决add KVO方案是根据,的View A_ _notifyframe changedchangeframeview 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
 }
}

编辑Remove observer当没有needed

[A removeObserver:self forKeyPath:@"frame"];
于 2013-02-07T06:14:05.397 回答
0

在 >iOS6 中,您可以尝试设置一些自动布局约束,或者尝试以下方式:

[self addObserver:self forKeyPath:@"viewA.frame" options:NSKeyValueObservingOptionOld context:NULL];

一定要在 dealloc 上删除观察者。然后,您会发现 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);
    }
}
于 2013-02-07T06:14:07.980 回答
0

相对于 View A 设置 View B 框架。编写一个方法-(void)ResizeFrame并将所有框架设置放入其中,并在需要更改框架时调用此函数。即 ViewB.frame=[ViewA.frame.origin.x,ViewA.frame.origin.y,ViewA.frame.size.width/2,ViewA.frame.size.height/2];在这里我已经给出了划分,你可以相应地改变它。

于 2013-02-07T06:15:33.323 回答