Calcolo sbagliato nel calcolo delle dimensioni NSString usando sizeWithFont: constraintedToSIze: lineBreakMode
-
25-10-2019 - |
Domanda
Ho un UITableViewCell con una visualizzazione secondaria costituita da un UITextView. Il contenuto del TextView è dinamico, quindi voglio misurare la larghezza e l'altezza esatta per creare un cellulare e un TextView senza necessità di scorrimento.
Ho creato il seguente metodo per misurare le dimensioni del NSString assumerà:
- (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];
}
Io lo utilizzo in questo modo:
// 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;
Ma non importa ciò che l'altezza calcolata è troppo piccolo, il che si traduce in una brutta scorrimento all'interno del CellView. Vale la pena ricordare che quasi tutti i testi contengono interruzioni di linea (\ n).
Che cosa sto facendo male qui?
Grazie
Soluzione
Credo che la vostra ** ** heightForRowAtIndexPath dovrebbe essere simile a questo:
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;
E inoltre si dovrebbe prendere in considerazione quello che ha fatto l'offset per il campo di testo 15px lungo X (che significa ciò larghezza per sizeWithFont dovrebbe essere inferiore a 15 px) e 10px dall'alto, vi suggerisco stesso valore d'uso per la parte inferiore per far sembrare centrato .
contentView hanno margini troppo, prendere tutto questo in considerazione.
Altri suggerimenti
UITextView è bisogno di uno spazio poco più grande della dimensione che avete calcolato. dal momento che ha un margine superiore e margine inferiore, io non sono sicuro di quanto è che. Se si desidera che misura perfetta, provare
[NSString drawInRect: withFont:]
o semplicemente fare un po 'più di spazio per UITextView, è possibile trovare lo spazio aggiuntivo provando.