2010-08-08 55 views
30

當調試器在斷點處停止,我無法找到我的任何UIViews的框架在那裏。iPhone - 是否有可能在Xcode調試器中檢查UIView的框架?

是否有可能做到這一點?

編輯:啓動賞金由於缺乏響應的。爲了清楚起見,我正在尋找的是一種無需添加額外調試代碼即可查看框架的方法。

而且,如果答案是「不,你不能這樣做」,獎金會去的,爲什麼你可以看到一些類的成員,但不是別人的最好說明。

回答

43

是的,你可以做到這一點。在調試時,在變量檢查器中找到感興趣的UIView。按住Control鍵點按它並選擇「將說明打印到控制檯」。例如,我這樣做是在一個UIViewController的_view伊娃和下列出現在控制檯:

Printing description of _view:
<UIView: 0x25b460; frame = (0 0; 320 480); autoresize = W+H; layer = <CALayer: 0x26b740>>

+0

使用Xcode 4,您經常無法以這種方式觀看視圖,或者您可以在輸出中獲得空白結果 - Xcode/clang/lldb中的所有錯誤。此外,這個答案不會讓你獲得其他細節,比如「view.bounds」。看到下面的其他答案 – Adam 2012-10-06 00:18:41

+1

或者你可以輸入'po [view_ivar frame],你會看到: $ 1 = 0x00173c50 ; layer = ; contentOffset:{0,0}> – Gin 2013-08-15 20:24:48

+0

你可以右鍵點擊,而不是按住Ctrl鍵點擊 – onmyway133 2014-10-09 08:47:26

0

有時他們剛出來的範圍由你到達那裏的時間。

它們打印到控制檯:

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

當然,有很多方法可以做到,如果我提前編寫代碼。 我想要的是一種不需要預先編碼的方法。因此,在跑步過程中,如果我想看到X的框架,我可以。 – 2010-08-08 20:21:41

+2

如果你要這樣,也試試NSStringFromCGRect(CGRect矩形) – 2013-08-04 23:47:58

+0

回到2010年這些是整數?我想知道他們什麼時候把它們改成了漂浮物。 – braden 2015-02-28 03:54:22

30

如果你去調試器面板,你可以在你在一個斷點類型本中:

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

當使用console debugger時,您可以按向上箭頭鍵循環前面的命令。在不輸入命令的情況下按下回車鍵將重複上一條命令。

+0

當我使用lldb而不是gdb並在模擬器上運行它時,我的xcode崩潰了...並同時殺死了我的OSX Desktop:D哇 – Infinite 2012-03-02 11:47:51

+0

也可以使用重寫的'description'方法與自定義的'UIView'子類一起使用。 – fabb 2013-01-29 14:51:06

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

將打印出整個視圖heirachy但似乎只在gdb的工作,而不是LLVM

1

發現LLDB答案。例如,這個工程

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

重新格式化@ EPage_Ed的答案,因爲原來是硬編碼爲他的具體情況:

在(LLDB)提示符下,鍵入:

print (CGRect)[view frame] 

或者,對於邊界:

print (CGRect)[view bounds] 
+0

這只是給了我錯誤:使用未聲明的標識符'CGRect' 錯誤:1錯誤解析表達式 – Lee 2013-07-16 11:51:13

+0

您的xcode版本可能已經破解 - 蘋果最近破壞了denugger,並沒有爲之修復直到更晚的版本 – Adam 2013-07-16 13:26:23

0

要獲得與NSString類似的調試器的幀信息,請使用NSStringFromCGRect(someView。幀)

6
NSLog(@"My view frame: %@", NSStringFromCGRect(myView.frame)); 
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 
2

在Xcode中,進入控制檯,輸入:

po viewName 

如果執行的內部代碼視圖,你可以:

po self 

這將輸出一些查看詳細信息,如下所示:

<UIView: 0x9cca0f0; frame = (0 0; 320 480); layer = <CALayer: 0x9ccabe0>> 
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的框架的另一種方式。

0

我更喜歡用於打印的簡短格式,即'p'來打印lldb中的幀。對於例如

p (CGRect)[view frame]