web-dev-qa-db-ja.com

iPhone-XcodeデバッガーでUIViewのフレームを検査することは可能ですか?

デバッガーがブレークポイントで停止すると、そこにUIViewのフレームが見つかりません。

これを行うことは可能ですか?

編集:応答の欠如のために報奨金を開始します。明確にするために、私が探しているのは、追加のデバッグコードを追加せずにフレームを表示する方法です。

また、答えが「あなたはそれを行うことができない」である場合、報奨金は、なぜあなたがクラスのメンバーを見ることができるが他のメンバーを見ることができないかについての最良の説明に行きます。

33

はい、できます。デバッグ中に、変数インスペクターで目的のUIViewを見つけます。 Controlキーを押しながらクリックして、[説明をコンソールに出力]を選択します。たとえば、UIViewControllerの_view ivarでこれを実行すると、コンソールに次のように表示されました。

_viewの説明の印刷:
<UIView:0x25b460;フレーム=(0 0; 320 480);自動サイズ変更= W + H;レイヤー= <CALayer:0x26b740 >>

46
Hilton Campbell

デバッガーパネルに移動すると、ブレークポイントにいるときに次のように入力できます。

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

コンソールデバッガー を使用する場合、上矢印キーを押して前のコマンドを切り替えることができます。コマンドを入力せずにreturnキーを押すと、最後のコマンドが繰り返されます。

31
Douglas

@EPage_Edの回答を再フォーマットするのは、オリジナルが特定のケースのためにハードコーディングされたためです。

(lldb)プロンプトで、次のように入力します。

print (CGRect)[view frame]

または、境界について:

print (CGRect)[view bounds]
19
Adam
NSLog(@"My view frame: %@", NSStringFromCGRect(myView.frame));
6
Nishant

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のフレームを検査する別の方法です。

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

ビュー階層全体を出力しますが、llvmではなくgdbでのみ機能するようです

3
Real World

興味深いことに、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
3
Breeno

Xcodeで、コンソールに移動して次のように入力します。

po viewName

実行がビューのコード内である場合、次のことができます。

po self

これにより、次のようなビューの詳細が出力されます。

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

Lldbでフレームを印刷するには、印刷用の短い形式、つまり「p」を使用します。たとえば.

p (CGRect)[view frame]
1
jarora

Lldbの回答が見つかりました。たとえば、これは機能します

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