Falsche Berechnung bei der Berechnung der Größe von NSString mit sizeWithFont:constraintedToSIze:lineBreakMode

StackOverflow https://stackoverflow.com/questions/6815525

  •  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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top