Calcolo sbagliato nel calcolo delle dimensioni NSString usando sizeWithFont: constraintedToSIze: lineBreakMode

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

  •  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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top