iOS上视图层次结构的可视化

时间:2012-07-27 12:11:37

标签: iphone ios xcode ipad

虽然我在开发iOS应用程序时发现在调试器中使用po [[UIWindow keyWindow] recursiveDescription]非常有用。但是,我想知道是否有一个工具可以优雅地表示输出以获得更好的可读性?

5 个答案:

答案 0 :(得分:2)

这是我在以后写的一种方法:

- (void)logView:(UIView*)v index:(int)i
{
    NSMutableString *str = [NSMutableString string];
    for (int u = 0; u<i; u++) { [str appendString:@"| "]; }
    [str appendFormat:@"<%@ %p frame:%@>", v.class, v, NSStringFromCGRect(v.frame)];
    // of course you can change it to display your accessibility hint/label
    printf("%s\n", [str UTF8String]);

    for (UIView *vv in v.subviews) { [self logView:vv index:i+1]; }
}

这样称呼:[self logView:myView index:0];

示例输出:

<UITextField 0x6b30010 frame:{{20, 13}, {280, 31}}>
| <UITextFieldRoundedRectBackgroundView 0x6b31e00 frame:{{0, 0}, {280, 31}}>
| | <UIImageView 0x6b31fe0 frame:{{0, 0}, {0, 0}}>
| | <UIImageView 0x6b32070 frame:{{0, 0}, {0, 0}}>
| | <UIImageView 0x6b320e0 frame:{{0, 0}, {0, 0}}>

答案 1 :(得分:1)

我通常使用po但是我之前找到了这个工具并且意味着尝试但是没有。

它将自己嵌入到您的应用中,并将自身公开为一个小型Web应用,以便您在使用该应用时可以查看视图层次结构的状态。

http://blog.thepete.net/blog/2011/05/01/inspect-state-of-our-running-ios-apps/

编辑:

添加评论中提到的sparkinpector。我检查了它,看起来非常酷 - 特别是如果你以编程方式创建视图。

答案 2 :(得分:0)

肯定有。在过去几年中我们已经走了很长一段路,-recursiveDescription是一种非常痛苦的方式来查看您的视图层次结构 - 尤其是当您的界面很复杂时。看看这个答案的一些新解决方案:

I need to inspect the view hierarchy on an iPhone program

答案 3 :(得分:0)

使用揭示应用:http://revealapp.com

这可能会有所帮助。

答案 4 :(得分:0)

这是一种私人方式,

编写以下代码,

NSLog("%@",[[[UIApplication sharedApplication] keyWindow] performSelector(@selector(recursiveDescription))]);

同样适用于任何观点:

NSLog("%@",[view performSelector(@selector(recursiveDescription))]);

这将为您提供整个视图层次结构。

请注意,在您的应用程序中使用此方法后,请不要将您的代码提交给Apple,因为这是私有API。只是,将它们用于调试目的。