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.
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 >>
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.
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]
NSLog(@"My view frame: %@", NSStringFromCGRect(myView.frame));
Dans XCode 5.1.1, vous pouvez survoler une variable qui est une UIView et vous verrez le type de popover suivant:
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.
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
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
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>>
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]
J'ai trouvé une réponse pour lldb. Par exemple, cela fonctionne
(lldb) print (CGRect)[((UIView *)[[[self backIV] subviews] objectAtIndex:1]) frame]
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);
Pour obtenir les informations de cadre similaires au débogueur en tant que NSString, utilisez NSStringFromCGRect (someView.frame).