iPhone - 可以在Xcode调试器中检查UIView的帧吗?

时间:2010-08-08 17:41:45

标签: iphone xcode debugging

当调试器在断点处停止时,我找不到任何UIViews的帧。

是否可以这样做?

编辑:由于缺乏回应而开始赏金。为了清楚起见,我正在寻找的是一种在不添加额外调试代码的情况下查看框架的方法。

此外,如果答案是“你不能做到”,那么赏金将最好地解释为什么你可以看到一些班级成员而不是其他班级成员。

12 个答案:

答案 0 :(得分:46)

是的,你可以做到。在调试时,在变量检查器中找到感兴趣的UIView。按住Control键并单击它,然后选择“将描述打印到控制台”。例如,我在UIViewController的_view ivar上执行了此操作,并且以下内容出现在控制台中:

  

打印_view的说明:
  < UIView:0x25b460; frame =(0 0; 320 480); autoresize = W + H; layer =< CALayer:0x26b740>>

答案 1 :(得分:30)

如果你进入调试器面板,你可以在断点时输入:

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

使用console debugger时,可以按向上箭头键循环显示上一个命令。在不输入命令的情况下按返回会重复上一个命令。

答案 2 :(得分:19)

重新格式化@ EPage_Ed的答案,因为原件是针对他的具体案例进行了硬编码的:

在(lldb)提示符下,键入:

print (CGRect)[view frame]

或者,对于界限:

print (CGRect)[view bounds]

答案 3 :(得分:6)

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

答案 4 :(得分:4)

在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框架的方法。

答案 5 :(得分:3)

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

将打印出整个视图层次结构,但似乎只能在gdb中工作,而不是llvm

答案 6 :(得分:3)

有趣的是,使用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

答案 7 :(得分:2)

在Xcode中,转到控制台并输入:

po viewName

如果执行是在视图的代码内部,您可以:

po self

这将输出一些视图细节,如下所示:

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

答案 8 :(得分:1)

找到了lldb的答案。例如,这可行

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

答案 9 :(得分:1)

我更喜欢打印的短格式,即'p'来打印lldb中的帧。例如,

p (CGRect)[view frame]

答案 10 :(得分:0)

当你到达那里时,它们有时会超出范围。

将它们打印到控制台:

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

答案 11 :(得分:0)

要获得类似于调试器的帧信息作为NSString,请使用NSStringFromCGRect(someView.frame)