Altezza UITableCellView variabile con visualizzazione secondaria
-
02-07-2019 - |
Domanda
Voglio creare un UITableView con diverse altezze di riga e sto cercando di farlo creando UILabels all'interno di UITableViewCells.
Ecco il mio codice finora:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *MyIdentifier = @"EntryCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
}
UILabel *textView = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 300, 40)];
textView.numberOfLines = 0;
textView.text = [entries objectAtIndex:[indexPath row]];
[cell.contentView addSubview:textView];
[textView release];
return cell;
}
Questo mi dà 2 righe di testo per cella. Tuttavia, ogni "voce" ha un numero diverso di righe e voglio che UITableViewCells si ridimensioni automaticamente, avvolgendo il testo secondo necessità, senza modificare la dimensione del carattere.
[textView sizeToFit]
e / o [cell sizeToFit]
non sembrano funzionare.
Ecco come voglio che UITableView appaia:
----------------
Lorem ipsum
----------------
Lorem ipsum
Lorem ipsum
----------------
Lorem ipsum
Lorem ipsum
Lorem ipsum
----------------
Lorem ipsum
----------------
Lorem ipsum
Lorem ipsum
----------------
Qualcuno sa come farlo correttamente?
Grazie.
Soluzione
UITableViewDelegate definisce un metodo opzionale heightForRowAtIndexPath, che ti farà iniziare. È quindi necessario utilizzare sizeWithFont.
C'è qualche discussione sul tuo preciso problema qui:
http: // www.v2ex.com/2008/09/18/how-to-make-uitableviewcell-have-variable-height/
Il dimensionamento del testo è stato anche discusso in questa discussione
Altri suggerimenti
Questo codice funziona per me. Non so se è perfetto, ma funziona.
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.row<[notesModel numberOfNotes]){
NSString *cellText = [@"Your text..."];
UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:12.0];
CGSize constraintSize = CGSizeMake([UIScreen mainScreen].bounds.size.width - 100, MAXFLOAT);
CGSize labelSize = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
return labelSize.height + 20;
}
else {
return 20;
}
}
textView.numberOfLines = 2? numberOflines imposta il massimo numero di righe, quindi forse 2 scriverà per te?