我有一个UIViewController
初始化了一个正确的框架,但是在我的代码中某处框架被破坏了,我很难找到它。
在这种情况下,watch
调试器中的变量通常很方便,但是我无法在变量视图中访问controller-> view-> frame属性,因为它不是'变量,它是一个属性(令人惊讶的是足够)
在变量显示中钻进UIView显示了一些东西,但我无法与框架相关,我想也许会在layer
中,但事实并非如此。
有没有办法监视私有API的更改?我猜不是,因为变量基本上是“隐藏的”,因此您无法准确指定watch
的内容。
或者,我可以使用其他什么方法?我已经尝试了子类化UIView,设置我的UIViewController的视图指向这个子类并打破setFrame方法,但它似乎没有用。
编辑:子类化UIView方法DID工作,我只需要将视图设置为指向viewDidLoad
中的测试子类而不是init
方法。让这个问题保持开放,因为我不确定这是否是解决这类问题的最佳方法......
答案 0 :(得分:5)
对要跟踪的视图进行子类化并重写setFrame方法:
@implementation MyTableView
- (void)setFrame:(CGRect)frame;
{
NSLog(@"%@", frame);
[super setFrame:frame];
}
@end
然后使用调试器向其添加断点并检查它何时被调用。最终,您将看到帧何时发生变化以及变化来自何处。
答案 1 :(得分:1)
我发现这可以使用键值观察器来完成。
答案 2 :(得分:0)
您可以创建一个ivar,view2,然后在loadView
方法中将其分配给您的视图。这应该使您能够像普通变量一样观看它。