Как я могу проверить иерархию представления в iOS? - PullRequest
166 голосов
/ 01 марта 2011

Существует ли инструмент с графическим интерфейсом, который проверяет иерархию представления приложения iOS?Я думаю о веб-инспекторе Webkit или подобных инструментах.Я пытаюсь отладить проблемы макета, такие как представления, имеющие неправильную позицию или размер, или дочерний элемент, который не содержится должным образом в его родительском элементе.В настоящее время я должен добавить утверждения, которые проверяют эти различные условия вручную, или устанавливать разные цвета фона для разных представлений, и, как вы можете себе представить, это действительно утомительный способ сделать это.

Я посмотрел на инструменты UI recorder, но он только записывает и воспроизводит действия пользовательского интерфейса и, в любом случае, работает только для приложений Mac.

Есть ли лучшее решение?

Ответы [ 11 ]

259 голосов
/ 01 марта 2011

Я не знаю, есть ли инструмент для проверки представлений в графическом интерфейсе, но мне повезло с методом отладки в UIView: -recursiveDescription

, если вы приостановите программу в отладчике и введете этов GDB (Изменить: также работает в LLDB)

po [[UIWindow keyWindow] recursiveDescription]

Вы получаете распечатку всей иерархии представления.Вы также можете вызвать его для определенного представления, чтобы получить распечатку иерархии представления этого представления.

Может быть немного утомительно просматривать информацию, которую вы получаете из него, но это оказалось полезным дляme.

Автор кредита пишет в этом блоге , в котором рассказывается об этом методе и также ссылается на эту полезную, но довольно трудную для поиска техническую заметку Apple .

160 голосов
/ 26 сентября 2014

Xcode 6 теперь имеет встроенную проверку иерархии 3D-вида, такую ​​как Reveal App и Spark Inspector.

enter image description here

Нажмите кнопку «Отладка иерархии представления», когда ваше приложение работает вприостановить выполнение и проверить представления в текущий момент.

enter image description here

Подробнее в Документация Apple .

46 голосов
/ 07 июня 2013

Reveal app screenshot

Как ни странно, теперь есть еще одна опция, http://revealapp.com/,, которая на данный момент находится в открытой (бесплатной) бета-версии. Как видите, это еще один визуальный инспектор.

РЕДАКТИРОВАТЬ 2014-04-05: Reveal вышел из бета-версии и больше не является бесплатным. Однако есть 30-дневная пробная версия.

35 голосов
/ 19 апреля 2012

Этот вопрос старый, но позвольте мне добавить информацию о новом инструменте, который я разрабатываю: https://github.com/glock45/iOS-Hierarchy-Viewer enter image description here

17 голосов
/ 16 мая 2013

enter image description here

Просто чтобы поддерживать актуальность этой темы, я недавно играл с Spark Inspector .Это не бесплатно, но очень приятно.

6 голосов
/ 29 августа 2017

Swift 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()

6 голосов
/ 15 марта 2016

Отладчик FLEX предоставляет инспектор представления в приложении, который позволяет изменять пользовательский интерфейс в работающем приложении.Также регистрируются сетевые запросы.

https://github.com/Flipboard/FLEX

enter image description here

6 голосов
/ 15 октября 2013

Бесплатно: просто введите это в инспекторе:

po [[UIWindow keyWindow] recursiveDescription]

Рекламный ролик: http://revealapp.com/ Я тестировал бета-версию раскрытия приложения, он был хорош, хотя и имел ошибки. Еще один коммерческий инструмент: http://sparkinspector.com/ работает без проблем.

2 голосов
/ 28 июня 2017

Это сбрасывает все в окне отладки. (Трудно прочитать, хотя) :( Работа на iOS 10, Xcode 8.3.3

po UIApplication.shared.keyWindow?.recursiveDescription()
0 голосов
/ 21 января 2019

Для swift / Xcode 10 введите это в консоль отладки:

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

Она выведет рекурсивную иерархию для любого заданного UIView.

(Кредит: Как отладить иерархию представлений с помощью recursiveDescription )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...