Estoy usando un UITableViewCell personalizado que tiene algunas etiquetas, botones y vistas de imágenes para mostrar. Hay una etiqueta en la celda cuyo texto es un NSString
objeto y la longitud de la cadena podría ser variable. Debido a esto, no puedo establecer una altura constante para la celda en el método UITableView
's heightForCellAtIndex
. La altura de la célula depende de la altura de la etiqueta que se puede determinar utilizando el NSString
's sizeWithFont
método. Intenté usarlo, pero parece que me estoy yendo mal en alguna parte. ¿Cómo se puede arreglar?
Aquí está el código utilizado para inicializar la celda.
if (self = [super initWithFrame:frame reuseIdentifier:reuseIdentifier])
{
self.selectionStyle = UITableViewCellSelectionStyleNone;
UIImage *image = [UIImage imageNamed:@"dot.png"];
imageView = [[UIImageView alloc] initWithImage:image];
imageView.frame = CGRectMake(45.0,10.0,10,10);
headingTxt = [[UILabel alloc] initWithFrame: CGRectMake(60.0,0.0,150.0,post_hdg_ht)];
[headingTxt setContentMode: UIViewContentModeCenter];
headingTxt.text = postData.user_f_name;
headingTxt.font = [UIFont boldSystemFontOfSize:13];
headingTxt.textAlignment = UITextAlignmentLeft;
headingTxt.textColor = [UIColor blackColor];
dateTxt = [[UILabel alloc] initWithFrame:CGRectMake(55.0,23.0,150.0,post_date_ht)];
dateTxt.text = postData.created_dtm;
dateTxt.font = [UIFont italicSystemFontOfSize:11];
dateTxt.textAlignment = UITextAlignmentLeft;
dateTxt.textColor = [UIColor grayColor];
NSString * text1 = postData.post_body;
NSLog(@"text length = %d",[text1 length]);
CGRect bounds = [UIScreen mainScreen].bounds;
CGFloat tableViewWidth;
CGFloat width = 0;
tableViewWidth = bounds.size.width/2;
width = tableViewWidth - 40; //fudge factor
//CGSize textSize = {width, 20000.0f}; //width and height of text area
CGSize textSize = {245.0, 20000.0f}; //width and height of text area
CGSize size1 = [text1 sizeWithFont:[UIFont systemFontOfSize:11.0f]
constrainedToSize:textSize lineBreakMode:UILineBreakModeWordWrap];
CGFloat ht = MAX(size1.height, 28);
textView = [[UILabel alloc] initWithFrame:CGRectMake(55.0,42.0,245.0,ht)];
textView.text = postData.post_body;
textView.font = [UIFont systemFontOfSize:11];
textView.textAlignment = UITextAlignmentLeft;
textView.textColor = [UIColor blackColor];
textView.lineBreakMode = UILineBreakModeWordWrap;
textView.numberOfLines = 3;
textView.autoresizesSubviews = YES;
[self.contentView addSubview:imageView];
[self.contentView addSubview:textView];
[self.contentView addSubview:webView];
[self.contentView addSubview:dateTxt];
[self.contentView addSubview:headingTxt];
[self.contentView sizeToFit];
[imageView release];
[textView release];
[webView release];
[dateTxt release];
[headingTxt release];
}
Esta es la etiqueta cuya altura y ancho van mal:
textView = [[UILabel alloc] initWithFrame:CGRectMake(55.0,42.0,245.0,ht)];
fuente
Si todas sus filas tienen la misma altura, simplemente configure la
rowHeight
propiedad de UITableView en lugar de implementar elheightForRowAtIndexPath
. Documentos de Apple:fuente
tableView.rowHeight
está configurado,heightForRowAtIndexPath
no se llamará, en caso de que esté tratando de averiguar por qué (como lo estaba yo).en un controlador UITableViewCell personalizado, agregue esto
En el controlador UITableView, agregue esto
fuente
fuente
fuente
Vi muchas soluciones pero todo estaba mal o incompleto. Puede resolver todos los problemas con 5 líneas en viewDidLoad y autolayout. Esto para el objetivo C:
Para swift 2.0:
Ahora cree su celda con xib o en la vista de tabla en su Storyboard Con esto, no necesita implementar nada más o anular. (No olvide las líneas 0 del número os) y la etiqueta inferior (restricción) rebaje "Prioridad de abrazo de contenido - Vertical a 250"
Puede descargar el código en la siguiente url: https://github.com/jposes22/exampleTableCellCustomHeight
fuente
Para establecer la dimensión automática para la altura de la fila y la altura estimada de la fila, asegúrese de seguir los siguientes pasos para que la dimensión automática sea efectiva para el diseño de altura de celda / fila.
UITableViewAutomaticDimension
a rowHeight & estimadoRowHeightheightForRowAt
y devolverle un valorUITableViewAutomaticDimension
)-
C objetivo:
Rápido:
Para instancia de etiqueta en UITableviewCell
Nota : Si tiene más de una etiqueta (UIElements) con longitud dinámica, que se debe ajustar de acuerdo con su tamaño de contenido: Ajuste 'Prioridad de contenido y Resistencia a la compresión' para las etiquetas que desea expandir / comprimir con mayor prioridad.
Aquí, en este ejemplo, establecí una prioridad de baja resistencia al abrazo y alta compresión, lo que lleva a establecer más prioridad / importancia para el contenido de la segunda etiqueta (amarilla).
fuente
Gracias a todas las publicaciones sobre este tema, hay algunas formas realmente útiles para ajustar la altura de fila de un UITableViewCell.
Aquí hay una compilación de algunos de los conceptos de todos los demás que realmente ayudan a la hora de crear para el iPhone y el iPad. También puede acceder a diferentes secciones y ajustarlas según los diferentes tamaños de vistas.
fuente
Para tener la altura de celda dinámica a medida que aumenta el texto de Label, primero debe calcular la altura, que el texto va a usar en el
-heightForRowAtIndexPath
método de delegado y devolverla con las alturas agregadas de otras etiquetas, imágenes (altura máxima de texto + altura de otra estática) componentes) y usan la misma altura en la creación de celdas.fuente