web-dev-qa-db-fra.com

Comment calculer la hauteur d'un NSAttributedString avec une largeur donnée dans iOS 6

Duplicate possible:
Comment obtenir la hauteur pour NSAttributedString à une largeur fixe

NSAttributedString est maintenant disponible dans iOS 6. Pour la mise en page, je souhaite savoir comment calculer la hauteur requise d’une chaîne NSAttributedString sous une largeur fixe. Je cherche quelque chose qui équivaut à - (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size de NSString mais à NSAttributedString.

Pour calculer la taille de dessin de NSAttributedStrings, deux méthodes sont disponibles:

  1. - (CGSize)size ne peut pas être utilisé car il ne prend en compte aucune largeur.
  2. J'ai essayé - (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context, mais de toute façon cela ne me donne pas la hauteur correcte. Je pense que la méthode est buggy. Si je lance le code suivant, il me donne bounding size: 572.324951, 19.000000 en ignorant la largeur donnée de 200. Cela devrait me donner quelque chose comme 100 de hauteur.
 NSMutableAttributedString * attributString = [[NSMutableAttributedString alloc] init]; 
 NSDictionary * attributs = @ {NSFontAttributeName: [UIFont fontWithName: @ "HelveticaNeue" taille: 15, NSForegroundColorAttribute: ; 
 [attributString appendAttributedString: [[NSAttributedString alloc] initWithString: @ "Attributed String\n" attributs: attributs]]; 
 [attributString appendAttributedString: [[NSAttributedString alloc]]\n "attributs: attributs]]; 
 [attributString appendAttributedString: [[NSAttributedString alloc]] initWithString: @" Attributed String\n "attributs: attributs]] 
 [attributString appendAttributedString: [[NSAttributedString alloc] initWithString: @ "Attributed String\n" attributs: attributs]]; 
 [attributString appendAttributedString: [[NSAttributedString alloc] initWithString: @ "Attributed String\n" attributs: attributs]]; 
 
 C GRect frame = [attributString boundingRectWithSize: CGSizeMake (200, 1000) options: 0 context: nil]; 
 NSLog (@ "taille de la délimitation:% f,% f", frame.size.width, frame.size. la taille);

Il existe d'autres méthodes disponibles pour Mac OS X, mais pas pour iOS.

60
Jake

L'option 2 fonctionne dans iOS avec les paramètres appropriés.

NSAttributedString *attrStr = ... // your attributed string
CGFloat width = 300; // whatever your desired width is
CGRect rect = [attrStr boundingRectWithSize:CGSizeMake(width, 10000) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil];

Sans les valeurs appropriées pour le paramètre options, vous obtiendrez une hauteur incorrecte.

Il est également nécessaire que attrStr contienne un attribut de police. Sans police, il n’ya aucun moyen de calculer correctement la taille.

167
rmaddy