簡體   English   中英

如何檢查iOS中的視圖層次結構?

[英]How do I inspect the view hierarchy in iOS?

是否有用於檢查iOS應用程序視圖層次結構的GUI工具? 我在考慮Webkit的Web檢查器或類似工具。 我正在尋找調試布局問題的方法,例如視圖或位置或大小錯誤,或者子項未正確包含在其父項中。 當前,我必須添加斷言來手動測試這些各種條件,或者在不同的視圖上設置不同的背景顏色,並且可以想象,這是一種非常乏味的解決方法。

我查看了Instruments的UI recorder ,但它僅記錄和播放UI操作`,並且在任何情況下僅適用於Mac應用。

有更好的解決方案嗎?

我不知道是否有GUI視圖檢查工具,但是我對UIView的調試方法有些運氣: -recursiveDescription

如果您在調試器中暫停程序並將其輸入到GDB中(編輯:在LLDB中也有效)

po [[UIWindow keyWindow] recursiveDescription]

您將獲得整個視圖層次結構的打印輸出。 您也可以在特定視圖上調用它,以獲取該視圖的視圖層次結構的打印輸出。

遍歷您從中獲得的信息可能有點乏味,但事實證明對我有用。

值得一提的是這篇博客文章該文章討論了這種方法,並與此有用的鏈接有關,但是很難找到Apple技術說明

Xcode 6現在內置了3D視圖層次結構檢查功能,例如Reveal App和Spark Inspector。

在此處輸入圖片說明

在您的應用程序運行時,單擊“調試視圖層次結構”按鈕以暫停執行並在當前時刻檢查視圖。

在此處輸入圖片說明

有關更多信息,請參閱Apple文檔

顯示應用截圖

奇怪的是,現在還有另一個選項http://revealapp.com/ ,截至本文發布時,該選項處於開放(免費)測試版中。 如您所見,它是另一個視覺檢查器。

編輯2014-04-05:Reveal已超出Beta,並且不再免費。 但是,有30天的試用期。

這個問題很舊,但是讓我在這里將有關我開發的新工具的信息放到這里: https : //github.com/glock45/iOS-Hierarchy-Viewer 在此處輸入圖片說明

在此處輸入圖片說明

為了使該線程保持最新狀態,我最近一直在使用Spark Inspector 它不是免費的,但是非常不錯。

免費:只需在檢查器中輸入:

po [[UIWindow keyWindow] recursiveDescription]

商業版: http ://revealapp.com/我測試了showapp的beta版本,雖然有錯誤,但是很好。 另一個商業工具: http : //sparkinspector.com/,它可以無縫運行。

FLEX調試器提供了一個應用程序內視圖檢查器,可讓您在運行的應用程序中修改UI。 它還記錄網絡請求。

https://github.com/Flipboard/FLEX

在此處輸入圖片說明

斯威夫特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()

這會將所有內容轉儲到調試窗口中。(很難閱讀):(在iOS 10上運行,Xcode 8.3.3

po UIApplication.shared.keyWindow?.recursiveDescription()

使用Xcode 8和Swift 2.3,已批准的答案不再對我有用 這對我有用:

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

對於swift / Xcode 10,將其輸入調試控制台:

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

它將為任何給定的UIView打印出遞歸層次結構。

(來源: 如何使用recursiveDescription調試視圖層次結構

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM