52 votes

Comment obtenir de la hauteur pour NSAttributedString à une largeur fixe

Je veux faire un dessin de NSAttributedStrings en fixe la largeur des cases, mais éprouve de la difficulté du calcul de la droite de hauteur ils prennent lorsqu'ils sont dessinés. Jusqu'à présent, j'ai essayé:

  1. Appelant - (NSSize) size, mais les résultats sont inutiles (pour cette raison), comme ils vont donner quelle que soit la largeur de la chaîne de désirs.

  2. Appelant - (void)drawWithRect:(NSRect)rect options:(NSStringDrawingOptions)options avec un rectangle en forme pour la largeur je veux et NSStringDrawingUsesLineFragmentOrigin dans les options, exactement comme j'utilise dans mon dessin. Les résultats sont ... difficiles à comprendre; certainement pas ce que je cherche. (Comme il est indiqué dans un certain nombre d'endroits, y compris ce Cacao-Dev thread).

  3. La création d'un temporaire NSTextView et en faisant:
    [[tmpView textStorage] setAttributedString:aString];
    Quand j'ai une requête le cadre de tmpView, la largeur est toujours comme souhaité, et la hauteur est souvent la bonne ... jusqu'à ce que j'arrive à chaînes plus longues, lorsque c'est souvent la moitié de la taille requise. (Il ne semble pas être d'une taille max d'être frappé: une image sera 273.0 élevé (environ 300 trop court), l'autre sera 478.0 (seulement 60-ish trop court)).

Je te remercie de tous les pointeurs, si quelqu'un a réussi cette.

31voto

Graham Miln Points 947
 -[NSAttributedString boundingRectWithSize:options:]
 

Vous pouvez spécifier NSStringDrawingUsesDeviceMetrics pour obtenir l' union de toutes les limites de glyphes .

Contrairement à -[NSAttributedString size] , le résultat retourné NSRect représente les dimensions de la zone qui changeraient si la chaîne est dessinée.

14voto

bonaldi Points 346

La réponse est d'utiliser
- (void)drawWithRect:(NSRect)rect options:(NSStringDrawingOptions)options
mais les rect vous passez doivent avoir 0.0 dans la dimension que vous voulez être illimitée (ce qui, euh, est parfaitement logique). Exemple ici .

5voto

Rob Keniger Points 32985

Vous pourriez être intéressé par l'excellente catégorie NS(Attributed)String+Geometrics Jerry Krinock, conçue pour effectuer toutes sortes de mesures de cordes, y compris ce que vous recherchez.

1voto

CodePlumber Points 576

Utiliser la méthode NSAttributedString

 - (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context
 

La taille est la contrainte sur la surface, la largeur de la surface calculée est limitée à la largeur spécifiée alors que la hauteur est flexible en fonction de cette largeur. On peut spécifier nil pour contexte si ce n'est pas disponible. Pour obtenir une taille de texte multiligne, utilisez NSStringDrawingUsesLineFragmentOrigin pour les options.

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