Necesito hacer celda personalizado en UITableViewStyleGrouped table.It debe mirar como si UITableViewCellStyleValue1 textLabel y detailTextLabel se mostraron sin truncamiento, o como UITableViewCellStyleSubtitle (pero con un ancho detailTextLabel = contentView.frame.size.width y UITextAlignmentRight) si en valor1 el estilo uno de las etiquetas está truncado.¿Cómo se obtiene el ancho de contenido de UITableViewCell?
Necesito saber el ancho de cell.contentView en el método - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
para decidir qué altura debe tener la celda. Yo comparo cell.contentView.width y la suma de anchos de etiquetas (los obtengo usando el método sizeThatFits:
) para decidirlo.
Entonces, ¿cómo obtener cell.contentView.frame.size.width correcto antes de la creación de la celda?
UPD: código para aclarar la pregunta.
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
CGFloat cellHeight = 44;
CGSize textSize = [[arrayOfTextData objectAtIndex:indexPath.row]
sizeWithFont:[UIFont systemFontOfSize:14]
constrainedToSize:CGSizeMake(1000, 100)
lineBreakMode:UILineBreakModeCharacterWrap];
CGSize detailedTextSize = [[arrayOfDetailTextData objectAtIndex:indexPath.row]
sizeWithFont:[UIFont systemFontOfSize:14]
constrainedToSize:CGSizeMake(1000, 100)
lineBreakMode:UILineBreakModeCharacterWrap];
if (textSize.width + detailedTextSize.width > /* I need here cell.contentView.frame.size.width*/ 300) {
cellHeight = textSize.height + detailedTextSize.height;
}
return cellHeight;
}
UPD2: El problema es que cuando se crea la célula cell.contentView.frame.size.width iguales e iguales cell.frame.size.width 320, pero después de células apareció cell.contentView.frame .size.width cambia en dependencia de tableView width y tableView style.
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"tmpCell";
CustomTableViewCellValue1OrSubtitle *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[CustomTableViewCellValue1OrSubtitle alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
}
//--Configure the cell
cell.textLabel.text = [arrayOfTextData objectAtIndex:indexPath];
cell.detailTextLabel.text = [arrayOfDetailTextData objectAtIndex:indexPath.row];
[cell layoutIfNeeded];
CGSize textSize = [cell.textLabel.text sizeWithFont:cell.textLabel.font constrainedToSize:CGSizeMake(cell.contentView.bounds.size.width, 99999) lineBreakMode:cell.textLabel.lineBreakMode];
CGSize detailedTextSize = [cell.detailTextLabel.text sizeWithFont:cell.textLabel.font constrainedToSize:CGSizeMake(cell.contentView.bounds.size.width, 99999) lineBreakMode:cell.textLabel.lineBreakMode];
CGFloat cellHeight = cell.contentView.frame.size.height;
NSLog(@"contentView.frame.size.width = %f",cell.contentView.frame.size.width);
//out: contentView.frame.size.width = 320.0
//Always print 320, even if I set Simulator on iPad
if (textSize.width + detailedTextSize.width > cell.contentView.frame.size.width) {
cellHeight = textSize.height + detailedTextSize.height;
}
return cellHeight;
}
¿Alguna vez encontró una solución para esto? Tengo un problema similar donde 'contentView.frame.size.width' devuelve 320 en iPhone durante la inicialización. – cod3monk3y
Terminé implementando 'layoutSubviews' para cambiar el tamaño del contenido de mi celda personalizada. – cod3monk3y
He hecho lo mismo. – Alexander