代码之家  ›  专栏  ›  技术社区  ›  Sam

如何检测uiview更改大小的时间?

  •  5
  • Sam  · 技术社区  · 16 年前

    我有一个 UIViewController 它是用一个正确的帧初始化的,但是在我的代码中的某个地方,帧会被损坏,我很难找到在哪里。

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

    在变量显示中钻入uiview会显示一些东西,但我无法与框架相关,我想这可能是 layer 但事实并非如此。

    有什么方法可以监视私有API中的更改吗?我想不是,因为变量本质上是“隐藏的”,所以你不能确切地指定 看 .

    或者,我可以使用什么其他方法?我已经尝试对uiview进行子类化,将uiviewController的视图设置为指向这个子类,并中断setframe方法,但它似乎不起作用。

    编辑:子类化的uiview方法确实有效,我只需要设置视图以指向 viewDidLoad 而不是 init 方法。我不确定这是否是解决这类问题的最佳方法,所以我把这个问题留着讨论……

    3 回复  |  直到 15 年前
        1
  •  5
  •   Marc M    15 年前

    子类化要跟踪和重写setframe方法的视图:

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

    然后使用调试器向它添加一个断点,并在调用它时进行检查。最后,您将看到帧何时更改以及更改来自何处。

        2
  •  1
  •   Sam    15 年前
        3
  •  0
  •   Ian Henry    16 年前

    您可以创建一个ivar,view2,并在 loadView 方法。这应该能让你像观察普通变量一样观察它。