iPhone - возможно ли проверить кадр UIView в отладчике Xcode? - PullRequest
32 голосов
/ 08 августа 2010

Когда отладчик останавливается в точке останова, я не могу найти там ни одного из моих UIViews.

Возможно ли это сделать?

РЕДАКТИРОВАТЬ: начало щедрости из-за отсутствия ответа. Просто чтобы прояснить, я ищу способ просмотра фрейма без добавления дополнительного кода отладки.

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

Ответы [ 12 ]

46 голосов
/ 14 августа 2010

Да, вы можете сделать это.Во время отладки найдите интересующий вас UIView в инспекторе переменных.Нажмите на него, удерживая клавишу Control, и выберите «Печать описания в консоль».Например, я сделал это на _view ivar UIViewController, и в консоли появилось следующее:

Печать описания _view:>

30 голосов
/ 15 августа 2010

Если вы переходите на панель отладчика, вы можете ввести ее, находясь в точке останова:

(gdb) print (CGRect) [self frame]
$1 = {
  origin = {
    x = 0, 
    y = 0
  }, 
  size = {
    width = 100, 
    height = 100
  }
}

При использовании консольного отладчика вы можете нажать клавишу со стрелкой вверхциклически повторять предыдущие команды.Нажатие возврата без ввода команды повторяет последнюю команду.

19 голосов
/ 06 октября 2012

Переформатируйте ответ @ EPage_Ed, потому что оригинал был жестко запрограммирован для его конкретного случая:

В приглашении (lldb) введите:

print (CGRect)[view frame]

Или для границ:

print (CGRect)[view bounds]
6 голосов
/ 14 июня 2013
NSLog(@"My view frame: %@", NSStringFromCGRect(myView.frame));
4 голосов
/ 06 августа 2014

В XCode 5.1.1 вы можете навести курсор на переменную, которая является UIView, и вы увидите следующий тип всплывающего окна:

enter image description here

Если вы нажмете кнопку «i», в консоли отладчика будет напечатан следующий тип вывода:

<UIImageView: 0xa49ca90; frame = (0 0; 640 360); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xa46c1c0>>

Это еще один способ проверки кадра UIView.

3 голосов
/ 25 ноября 2013

Интересно, что использование метода get для возврата кадра представления работает:

print (CGRect)[view frame]

Это дает ожидаемый результат:

(CGRect) $2 = origin=(x=0, y=20) size=(width=320, height=48)

Но если вы попытаетесь использовать точечную нотацию, котораяЯ слышал, что так часто говорят, что он предоставляется просто для «синтаксического сахара»:

print (CGRect)view.frame

Вы получаете следующую ошибку:

error: C-style cast from '<unknown type>' to 'CGRect' is not allowed
3 голосов
/ 16 мая 2012
po [[[[UIApplication sharedApplication]windows] objectAtIndex:0] recursiveDescription]

распечатает всю иерархию представлений, но, кажется, работает только в GDB, а не llvm

2 голосов
/ 17 января 2014

В Xcode перейдите в консоль и введите:

po viewName

Если выполнение находится внутри кода для представления, вы можете просто:

po self

Это выведет некоторые детали просмотра, например:

<UIView: 0x9cca0f0; frame = (0 0; 320 480); layer = <CALayer: 0x9ccabe0>>
1 голос
/ 14 сентября 2015

Я предпочитаю краткую форму для печати, т. Е. 'P', чтобы распечатать кадр в lldb.Например,

p (CGRect)[view frame]
1 голос
/ 02 августа 2012

Нашел ответ для lldb.Например, это работает

(lldb) print (CGRect)[((UIView *)[[[self backIV] subviews] objectAtIndex:1]) frame]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...