【问题标题】:How to detect when a UIView has changed size?如何检测 UIView 何时更改大小?
【发布时间】:2010-01-27 13:00:58
【问题描述】:

我有一个UIViewController,它使用正确的框架进行了初始化,但是在我的代码中的某个地方,框架被破坏了,我很难找出在哪里。

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

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

有什么方法可以观察私有 API 的变化吗?我猜不是,因为这些变量本质上是“隐藏的”,所以你不能确切地指定 watch 是什么。

或者,我还可以使用什么其他方法?我已经尝试将 UIView 子类化,将 UIViewController 的视图设置为指向该子类并中断 setFrame 方法,但它似乎不起作用。

编辑:子类化 UIView 方法确实有效,我只需将视图设置为指向 viewDidLoad 中的测试子类,而不是 init 方法。留下这个问题,因为我不确定这是否是解决此类问题的最佳方法......

【问题讨论】:

    标签: iphone debugging uiview uiviewcontroller


    【解决方案1】:

    子类化你想要跟踪的视图并重写 setFrame 方法:

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

    然后使用调试器为其添加断点并检查它何时被调用。最终,您会看到框架何时更改以及更改来自何处。

    【讨论】:

    • 山姆,它应该可以工作。如果框架发生变化,则应调用此方法。如果不是,则问题可能出在上游的其他地方。
    • 在使用自动布局约束时可能不会被调用。
    【解决方案2】:

    【讨论】:

    • 您只关注contentSize 还是您使用了其他属性?
    【解决方案3】:

    您可以创建一个 ivar view2,然后在 loadView 方法中将其分配给您的视图。这应该使您能够像普通变量一样观察它。

    【讨论】:

      猜你喜欢
      • 2015-08-17
      • 1970-01-01
      • 2014-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多