为了辅助你的视图考古,你可以用一个只能用于调试的方法,叫做 recursiveDescription ,它能打印出任意视图的视图层次结构。注意这是一个私有方法,
`不应该被包含在任何会被放到 App Store 的代码里`,但它对与视图层次结构实在非常有用。
添加如下打印语句到 tableView:cellForRowAtIndexPath: 中,放在
return 语句之前:
#ifdef DEBUG
NSLog(@"cell recursive description:\n\n%@\n\n",[cell performSelector:@selector(recursiveDescription)]);
#endif
一旦添加了这一行代码,你就会得到一个警告,也就是 recursiveDescription 未被申明;因为它是一个私有方法,编译器并不知道它的存在,ifdef
/ endif 包装器将会额外确保这行代码不会被编译进最终的 release 版里。
编译并运行;你会看到控制台全都是 log 语句,类似下面这样:
目前 Cell 里有六个视图:
UITableViewCell这是最高层的视图。 Frame 显示它有 320 点宽和 44 点高——宽度和高度都喝预期的一致,因为它和屏幕一样宽,而高度就是 44 点。UITableViewCellScrollView虽然你不能直接使用这个私有类,但它的名字很好地暗示了它的功能。它的 Size 和 Cell 的一样。据此我们推断它的作用是在 Delete 按钮之上装载滑动出来的内容。UIButton它在 Cell 的最右边,就是 Disclosure Indicator 按钮。注意这不是 Delete 按钮。UIImageView是上面UIButton的子视图,装载着 Disclosure Indicator 的图像。UITableViewCellContentView另外一个私有类,它包含 Cell 的内容。这个类对于开发者来说就是UITableViewCell的contentView属性。但它只作为一个UIView来暴露在外,这就意味着你只在其上调用使用公开的UIView方法;而不能使用任何与这个类关联的任何私有方法。UILabel显示 “Item #” 文本。
本文介绍如何利用私有的recursiveDescription方法调试iOS应用中的视图层次结构,通过打印视图信息帮助理解各组件布局及关系。
1万+

被折叠的 条评论
为什么被折叠?



