Questo argomento generale è stato posto più volte qui: come rendere UITableViewCells con quantità variabili di testo e quindi altezza variabile. La risposta canonica è: si calcola l'altezza nella delegazione del controller della vista tabella in heightForRowAtIndexPath utilizzando sizeWithFont: constrainedToSize: lineBreakMode :. Più tardi, la cella viene disegnata e tu usi qualcosa come [label sizeToFit] se necessario, e tutto funziona come per magia.Calcolo dell'altezza del testo multilinea per UILabel/UITableViewCell: risultati diversi durante il calcolo rispetto al disegno reale
Il mio problema: sto ricevendo il wrapping per alcune celle perché sizeWithFont: restituisce diverse dimensioni dal disegno reale.
Un esempio specifico:
Il testo è questo: "! La gente dimentica che @BillGates avuto un sexy 1/4 di pollice di spessore ardesia nel 1993 da NEC Qualunque cosa accada questa settimana non sarà riguardo all'hardware"
CGSize theSize = [text sizeWithFont:[UIFont systemFontOfSize:17.0f] constrainedToSize:CGSizeMake(310.0f, FLT_MAX) lineBreakMode:UILineBreakModeWordWrap];
NSLog(@"calculated size for %@: %f, %f",text, theSize.width, theSize.height);
Questo restituisce: 306,000000, 84,000000. (I.e 4 righe con font 17px e 4px linespacing, 21px leading.) Buono.
Tuttavia, più tardi, quando il prelievo del cellulare:
label = (UILabel *)[cell viewWithTag:3];
label.text = [NSString stringWithFormat:@"%@", text];
label.lineBreakMode = UILineBreakModeWordWrap;
label.font = [UIFont systemFontOfSize:17.0f];
CGSize labelSize;
labelSize = label.frame.size;
NSLog(@"label size before resizing: %f, %f", labelSize.width, labelSize.height);
[label sizeToFit];
labelSize = label.frame.size;
NSLog(@"label size after resizing: %f, %f for text %@", labelSize.width, labelSize.height,text);
(.. UILabel viene caricato come parte di UITableViewCell da NIB In IB ho impostato a 310px di larghezza)
Questo deve restituire esattamente stesse dimensioni di cui sopra. Invece, ottengo 281,000000, 105,000000 come le dimensioni dopo la chiamata sizeToFit. Ora sono 5 righe in fase di disegno anziché 4 e il testo si rovescia, vedo lo spillover nell'interfaccia utente.
Quindi, per lo stesso testo, sto calcolando due dimensioni diverse e non riesco a capirlo. È qualcosa su UILabel? Ha dei margini interni? Questo continua ad accadere per alcuni testi ma non per altri, e non l'ho rintracciato in qualcosa di particolare riguardo agli archi; sembra casuale. This topic evidenzia che esistono due passaggi di elaborazione: calcolo dell'altezza rispetto al disegno corrente. Questo è coerente con quello che sto vedendo. Ma non capisco cosa sta succedendo esattamente o come risolverlo.
La domanda: perché vedo due diverse dimensioni calcolate e come risolverlo?
grazie, era quello che stavo cercando: ** CGSize labelSize; labelSize = UILabelName.frame.size; ==> labelSize.height ** – cV2