42 votes

Comment utiliser NSString drawInRect pour centrer le texte?

Comment puis-je établir une NSString centré à l'intérieur d'un NSRect?

J'ai commencé avec: (extrait de la méthode drawRect de ma vue personnalisée)

NSString* theString = ...
[theString drawInRect:theRect withAttributes:0];
[theString release];

Maintenant, je suppose que j'ai besoin de configurer certains attributs. J'ai eu un coup d'oeil par le biais de la Pomme de Cacao, de la documentation, mais c'est un peu écrasante et ne peut pas trouver quoi que ce soit pour comment ajouter des styles de paragraphe pour les attributs.

Aussi, je ne peux que trouver horizontal alignement, qu'en vertical alignement?

97voto

Martin Pilkington Points 2355

Alignement vertical que vous devrez faire vous-même ((hauteur de vue + hauteur de chaîne) / 2). Alignement horizontal que vous pouvez faire avec:

 NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
[style setAlignment:NSTextAlignmentCenter];
NSDictionary *attr = [NSDictionary dictionaryWithObject:style forKey:NSParagraphStyleAttributeName];
[myString drawInRect:someRect withAttributes:attr];
 

27voto

Nikolay Klimchuk Points 311

Cela fonctionne pour moi pour l'alignement horizontal

 [textX drawInRect:theRect withFont:font lineBreakMode:UILineBreakModeClip alignment:UITextAlignmentCenter];
 

19voto

matthewwithanm Points 1638

La réponse de Martins est assez proche, mais elle comporte quelques petites erreurs. Essaye ça:

 NSMutableParagraphStyle* style = [[NSMutableParagraphStyle alloc] init];
[style setAlignment:NSCenterTextAlignment];
NSDictionary *attr = 
  [NSDictionary dictionaryWithObject:style 
                              forKey:NSParagraphStyleAttributeName];
[myString drawInRect:someRect withAttributes:attr];
[style release];
 

Vous devrez créer un nouveau NSMutableParagraphStyle (au lieu d'utiliser le style de paragraphe par défaut comme suggéré par Martin) car [NSMutableParagraphStyle defaultParagraphStyle] renvoie un NSParagraphStyle , qui n'a pas la méthode setAlignment. De plus, vous n'avez pas besoin de la chaîne @"NSParagraphStyleAttributeName" --just NSParagraphStyleAttributeName .

13voto

Dorin Grecu Points 564

Cela fonctionne pour moi:

     CGRect viewRect = CGRectMake(x, y, w, h);
    UIFont* font = [UIFont systemFontOfSize:15];
    CGSize size = [nsText sizeWithFont:font
                     constrainedToSize:viewRect.size
                         lineBreakMode:(UILineBreakModeWordWrap)];  
    float x_pos = (viewRect.size.width - size.width) / 2; 
    float y_pos = (viewRect.size.height - size.height) /2; 
    [someText drawAtPoint:CGPointMake(viewRect.origin.x + x_pos, viewRect.origin.y + y_pos) withFont:font];
 

5voto

David H Points 23654

[NSMutableParagraphStyle defaultParagraphStyle] ne fonctionnera pas, utilisez:

[NSMutableParagraphStyle new]

de plus, il semble que l'alignement horizontal ne fonctionne que pour drawInRect , pas drawAtPoint (demandez-moi comment je sais :-)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X