calcul erroné lorsque la taille du calcul de NSString utilisant sizeWithFont: constraintedToSIze: lineBreakMode

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

  •  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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top