web-dev-qa-db-fra.com

iPhone - est-il possible d'inspecter le cadre d'un UIView dans le débogueur Xcode?

Lorsque le débogueur est arrêté à un point d'arrêt, je ne trouve pas le cadre d'aucune de mes UIViews dans celui-ci.

Est-il possible de faire cela?

EDIT: commencer une prime en raison du manque de réponse. Pour être clair, je cherche un moyen de voir le cadre sans ajouter de code de débogage supplémentaire.

En outre, si la réponse est "non, vous ne pouvez pas le faire", la prime ira à la meilleure explication de la raison pour laquelle vous pouvez voir certains membres de la classe mais pas les autres.

31
William Jockusch

Oui tu peux le faire. Pendant le débogage, trouvez l’avis UIV intéressant dans l’inspecteur de variables. Ctrl-cliquez dessus et sélectionnez "Imprimer la description sur la console". Par exemple, je l’ai fait sur le _view ivar d’un UIViewController et les éléments suivants sont apparus dans la console:

Description d'impression de _view:
<UIView: 0x25b460; trame = (0 0; 320 480); redimensionnement automatique = W + H; layer = <CALayer: 0x26b740 >>

46
Hilton Campbell

Si vous allez dans le panneau du débogueur, vous pouvez taper ceci pendant que vous êtes à un point d'arrêt:

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

Lorsque vous utilisez le console débogueur , vous pouvez appuyer sur la flèche vers le haut pour faire défiler les commandes précédentes. Appuyer sur Entrée sans entrer de commande répète la dernière commande.

30
Douglas

Reformater la réponse de @ EPage_Ed car l'original était codé en dur pour son cas spécifique:

À l'invite (lldb), tapez:

print (CGRect)[view frame]

Ou, pour les limites:

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

Dans XCode 5.1.1, vous pouvez survoler une variable qui est une UIView et vous verrez le type de popover suivant:

enter image description here

Si vous cliquez sur le bouton 'i', le type de sortie suivant sera imprimé dans la console du débogueur:

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

C'est une autre façon d'inspecter le cadre d'un UIView.

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

affichera toute la hiérarchie de la vue mais ne semble fonctionner que dans gdb et non avec llvm

3
Real World

Fait intéressant, utiliser la méthode getter pour renvoyer le cadre de la vue fonctionne:

print (CGRect)[view frame]

Cela donne le résultat attendu:

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

Mais si vous essayez d’utiliser la notation par points, que j’entends souvent dire comme étant simplement fournie pour 'sucre syntaxique':

print (CGRect)view.frame

Vous obtenez l'erreur suivante:

error: C-style cast from '<unknown type>' to 'CGRect' is not allowed
3
Breeno

Dans Xcode, accédez à la console et tapez:

po viewName

Si l'exécution est un code interne à la vue, vous pouvez simplement:

po self

Cela affichera quelques détails de vue, comme ceci:

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

Je préfère la forme abrégée pour l’impression, c’est-à-dire «p», pour imprimer le cadre en lldb. Par exemple.

p (CGRect)[view frame]
1
jarora

J'ai trouvé une réponse pour lldb. Par exemple, cela fonctionne

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

Parfois, ils sont tout simplement hors de portée au moment où vous y arrivez.

Imprimez-les sur la console:

NSLog('Frame: %d, %d, %d, %d', frame.Origin.x, frame.Origin.y, frame.size.width, frame.size.height);
0
Matt Williamson

Pour obtenir les informations de cadre similaires au débogueur en tant que NSString, utilisez NSStringFromCGRect (someView.frame).

0
Jack B