calcul erroné lorsque la taille du calcul de NSString utilisant sizeWithFont: constraintedToSIze: lineBreakMode
-
25-10-2019 - |
Question
J'ai un UITableViewCell avec un composé d'un sous-vue UITextView. Le contenu de la textview est dynamique, donc je veux mesurer la largeur et la hauteur exactes pour créer une cellule et un textview sans besoin de faire défiler.
J'ai créé la méthode suivante pour mesurer la taille du NSString prendra:
- (CGSize)getSizeOfString:(NSString *)str font:(NSString *)theFont fontSize:(CGFloat)theSize {
CGSize maxSize = CGSizeMake(280, CGFLOAT_MAX);
UIFont *font = [UIFont fontWithName:theFont size:theSize];
return [str sizeWithFont:font constrainedToSize:maxSize lineBreakMode:UILineBreakModeWordWrap];
}
Je l'utilise de cette façon:
// CellForRowAtIndexPath
.....
CGSize size = [strTool getSizeOfString:text font:TEXT_FONT fontSize:TEXT_SIZE];
CGFloat width = size.width;
CGFloat height = size.height;
UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(15, 10, width, height)];
[textView setBackgroundColor:[UIColor blueColor]];
textView.font = [UIFont fontWithName:TEXT_FONT size:TEXT_SIZE];
textView.editable = NO;
// Set value
textView.text = text;
[cell.contentView addSubview:textView];
[textView release];
return cell;
// heightForRowAtIndexPath
NSString *returnStr;
if (indexPath.section == SECTION_SHORT)
returnStr = self.manchet;
else
returnStr = self.newsText;
return [strTool getSizeOfString:returnStr font:TEXT_FONT fontSize:TEXT_SIZE].height;
Mais quelle que soit la hauteur calculée est trop faible, ce qui se traduit par un défilement méchant à l'intérieur du Cellview. Il est que presque vaut mentionner tous les textes contiennent linebreaks (\ n).
Qu'est-ce que je fais mal ici?
Merci
La solution
Je pense que votre ** heightForRowAtIndexPath ** devrait ressembler à ceci:
NSString *returnStr;
if (indexPath.section == SECTION_SHORT) returnStr = self.manchet;
else returnStr = self.newsText;
return [strTool getSizeOfString:returnStr font:TEXT_FONT
fontSize:TEXT_SIZE].height+10.0f*2.0f;
Et vous devez prendre en compte ce que vous a fait compensez pour le champ de texte 15px le long X (ce qui signifie que largeur pour sizeWithFont devrait être inférieure à 15 pixels) et 10px de haut, je suggère que l'utilisation même valeur pour le fond pour le faire paraître centré .
contentView ont des marges aussi, prendre tout cela en compte.
Autres conseils
UITextView est besoin d'un peu plus d'espace que la taille que vous avez calculé. Je ne sais pas à quel point est que depuis qu'il a une marge de marge supérieure et inférieure,. Si vous voulez ajustement parfait, essayez
[NSString drawInRect: withFont:]
ou tout simplement faire un peu d'espace pour plus UITextView, vous pouvez trouver l'espace supplémentaire en essayant.