Подтвердить что ты не робот

IPhone - можно ли проверить кадр UIView в отладчике Xcode?

Когда отладчик остановлен в точке останова, я не могу найти фрейм любого из моих UIView.

Можно ли это сделать?

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

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

4b9b3361

Ответ 1

Да, вы можете это сделать. Во время отладки найдите UIView интерес к инспектору переменных. Нажмите "Control" и выберите "Print Description to Console". Например, я сделал это на _view ivar UIViewController, и на консоли появилось следующее:

Печать описания _view:
< UIView: 0x25b460; frame = (0 0; 320 480); autoresize = W + H; layer = < CALayer: 0x26b740 →

Ответ 2

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

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

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

Ответ 3

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

В командной строке (lldb) введите:

print (CGRect)[view frame]

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

print (CGRect)[view bounds]

Ответ 4

NSLog(@"My view frame: %@", NSStringFromCGRect(myView.frame));

Ответ 5

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

enter image description here

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

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

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

Ответ 6

po [[[[UIApplication sharedApplication]windows] objectAtIndex:0] recursiveDescription]

распечатает весь вид heirachy, но, похоже, работает только в gdb, а не llvm

Ответ 7

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

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

Ответ 8

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

po viewName

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

po self

Здесь будут выводиться некоторые детали просмотра, например:

<UIView: 0x9cca0f0; frame = (0 0; 320 480); layer = <CALayer: 0x9ccabe0>>

Ответ 9

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

(lldb) print (CGRect)[((UIView *)[[[self backIV] subviews] objectAtIndex:1]) frame]

Ответ 10

Иногда к тому времени, когда вы туда попадете, они просто вышли из сферы.

Распечатайте их на консоли:

NSLog('Frame: %d, %d, %d, %d', frame.origin.x, frame.origin.y, frame.size.width, frame.size.height);

Ответ 11

Чтобы получить информацию о кадре, подобную отладчику, как NSString, используйте NSStringFromCGRect (someView.frame)

Ответ 12

Я предпочитаю короткую форму для печати, т.е. 'p' для печати кадра в lldb. Например,

p (CGRect)[view frame]