Falsche Berechnung bei der Berechnung der Größe von NSString mit sizeWithFont:constraintedToSIze:lineBreakMode
-
25-10-2019 - |
Frage
Ich habe eine UITableViewCell mit einer Untersicht aus einem UITextView.Die Inhalte der textview dynamisch ist, so will ich Messen Sie die genaue Breite und Höhe zu erstellen, eine Zelle und eine textview mit ohne scrollen zu müssen.
Ich habe die folgende Methode zum Messen der Größe der NSString nehmen:
- (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];
}
Ich benutze es in diese Weise:
// 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;
Aber egal, was die berechnete Höhe ist zu klein, die Ergebnisse in eine böse scrollen innerhalb der cellView.Es ist erwähnenswert, dass fast alle Texte enthalten Zeilenumbrüche ( ).
Was mache ich hier falsch?
Vielen Dank
Lösung
Ich denke, Ihr ** heightForRowAtIndexPath** sollte in etwa so Aussehen:
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;
Und Sie sollten auch berücksichtigen, was Sie gemacht offset Textfeld 15px entlang X (was bedeutet was in der Breite für sizeWithFont kleiner sein sollte auf 15px) und 10px von oben, schlage ich vor, verwenden Sie denselben Wert für Boden, um es so Aussehen zentriert.
contentView haben die Margen zu, all dies berücksichtigen.
Andere Tipps
UitextView benötigt etwas größer als die von Ihnen berechnete Größe. Da es einen oberen Rand und einen unteren Rand hat, bin ich mir nicht sicher, wie viel das ist. Wenn Sie eine perfekte Passform wünschen, probieren Sie es aus
NSString DrawinRect: WithFont:
Oder machen Sie einfach etwas mehr Platz für UitextView, Sie können den zusätzlichen Platz finden, indem Sie es versuchen.