2010-01-27 34 views
5

我有一个UIViewController,它是用一个正确的框架初始化的,但是在我的代码中某个地方框架被弄坏了,我很难找到它的位置。如何检测UIView何时更改大小?

在这种情况下,调试器中的变量通常很方便watch,但是我无法访问我的变量视图中的controller-> view-> frame属性,因为它不是变量,它是一个属性(令人惊讶的足够)

在变量显示中钻入UIView显示了一些东西,但没有任何我可以涉及的框架,我想也许这将在layer,但它不是。

有什么办法可以监视私人API的变化吗?我想不是,因为变量本质上是“隐藏的”,所以你不能指定watch的确切内容。

或者,我还可以使用其他方法?我已经尝试继承UIView,设置我的UIViewController的视图指向这个子类和打破了setFrame方法,但它似乎没有工作。

编辑:子类UIView方法DID的工作,我只需要设置视图指向我的测试子类viewDidLoad而不是init方法。由于我不确定这是否是解决此类问题的最佳方式,因此我不确定这个问题是否已被解决......

回答

0

您可以创建一个ivar,view2,并将其仅分配给您的loadView方法中的视图。这应该使你能够像正常变量一样观看它。

5

子类你要跟踪并重写SETFRAME方法的观点:

@implementation MyTableView 

- (void)setFrame:(CGRect)frame; 
{ 
    NSLog(@"%@", frame); 
    [super setFrame:frame]; 
} 

@end 

然后使用调试器断点添加到它,并检查时,它被调用。最终,您会看到框架何时发生变化以及变化从何而来。

+0

是啊,我已经在这个问题提到了这一点... – Sam 2011-07-20 09:22:39

+0

山姆,它应该工作。如果帧被改变了,这个方法应该被调用。如果不是这个问题在上游其他地方。 – 2011-07-26 11:20:08

+6

使用自动布局约束时可能不会调用此方法。 – kpozin 2013-06-12 15:30:13