如何检查iOS中的视图层次结构?

时间:2011-03-01 03:30:16

标签: ios cocoa-touch uikit

是否有用于检查iOS应用的视图层次结构的GUI工具?我正在考虑Webkit的Web检查器或类似的工具。我正在调试布局问题,例如具有错误位置或大小的视图,或者未正确包含其父级的子级。目前我必须添加断言,手动测试这些不同的条件,或者在不同的视图上设置不同的背景颜色,并且你可以想象,这是一个非常繁琐的方法。

我查看了仪器的UI recorder,但只记录和播放UI动作,无论如何,只适用于Mac应用程序。

有更好的解决方案吗?

11 个答案:

答案 0 :(得分:259)

我不知道是否有GUI视图检查工具,但我对UIView上的调试方法运气不错:-recursiveDescription

如果你在调试器中暂停程序并将其输入到GDB中(编辑:也适用于LLDB)

  

po [[UIWindow keyWindow] recursiveDescription]

您将获得整个视图层次结构的打印输出。您还可以在特定视图上调用它以获取该视图的视图层次结构的打印输出。

通过你从中得到的信息可能有点乏味,但事实证明它对我有用。

信用转到this blog post,其中讨论了此方法,并且还与this helpful, but rather hard to find Apple tech note相关联。

答案 1 :(得分:157)

Xcode 6现在具有内置的3D视图层次结构检查功能,如Reveal App和Spark Inspector。

enter image description here

单击" Debug View Hierarchy"在您的应用程序运行时按钮暂停执行并在当前时刻检查视图。

enter image description here

Apple's documentation的更多信息。

答案 2 :(得分:46)

Reveal app screenshot

奇怪的是,现在还有另一种选择,http://revealapp.com/,截至本文的帖子是开放(免费)测试版。正如你所看到的那样,它是另一位视觉检查员。

EDIT 2014-04-05:Reveal已经超出Beta版,不再免费。然而,有一个为期30天的试验。

答案 3 :(得分:35)

这个问题已经过时了,但是让我在这里介绍一下我开发的新工具: https://github.com/glock45/iOS-Hierarchy-Viewer enter image description here

答案 4 :(得分:17)

enter image description here

为了让这个帖子保持最新状态,我最近一直在玩Spark Inspector。它不是免费的,但它非常好。

答案 5 :(得分:6)

免费:只需在检查员中输入:

po [[UIWindow keyWindow] recursiveDescription]

商业:http://revealapp.com/我测试了revealapp的beta版本,但它有好处但有bug。 另一个商业工具:http://sparkinspector.com/它无缝地工作。

答案 6 :(得分:6)

FLEX Debugger提供了一个应用内视图检查器,可让您修改正在运行的应用中的用户界面。它还记录网络请求。

https://github.com/Flipboard/FLEX

enter image description here

答案 7 :(得分:6)

斯威夫特4。

<强>的iOS

extension UIView {

   // Prints results of internal Apple API method `recursiveDescription` to console.
   public func dump() {
      Swift.print(perform(Selector(("recursiveDescription"))))
   }
}

<强> MACOS

extension NSView {

   // Prints results of internal Apple API method `_subtreeDescription` to console.
   public func dump() {
      Swift.print(perform(Selector(("_subtreeDescription"))))
   }
}

用法(在调试器中):po myView.dump()

答案 8 :(得分:2)

这会在调试窗口中全部转储。(很难读取):( 在iOS 10上运行,Xcode 8.3.3

po UIApplication.shared.keyWindow?.recursiveDescription()

答案 9 :(得分:0)

批准的答案不再适用于我,使用 Xcode 8 和Swift 2.3。这对我有用:

po UIApplication.sharedApplication().keyWindow?.recursiveDescription()

答案 10 :(得分:0)

对于swift / Xcode 10,将其输入调试控制台:

po yourView.value(forKey: "recursiveDescription")!

它将为任何给定的UIView打印出递归层次结构。

(信用:How to debug your view hierarchy using recursiveDescription