Estoy sobrecargar el método delegado -tableView:heightForRowAtIndexPath:
y el uso de -sizeWithFont:constrainedToSize:
para establecer mediante programación la altura de la celda, basándose en el texto en la celda:Restablecimiento de encargo UITableViewCell altura cuando el iPhone se gira
- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
switch (indexPath.section) {
case(kAboutViewOverviewSection): {
switch (indexPath.row) {
case(kAboutViewOverviewSectionRow): {
NSString *text = NSLocalizedString(@"kAboutViewOverviewSectionFieldText", @"");
CGSize s = [text sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake(280, 500)];
return s.height + 13;
}
default: {
break;
}
}
break;
}
default: {
break;
}
}
return 44.0;
}
Esto funciona cuando la mesa primero se dibuja. Sin embargo, cuando cambio la orientación del dispositivo, de vertical a horizontal, la altura de la celda no cambia.
me trataron reemplazando el método -shouldAutorotateToInterfaceOrientation:
en mi controlador de vista de tabla:
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
[self.tableView reloadData];
return YES;
}
Esto debería volver a cargar los datos de la tabla y (presumiblemente) volver a dibujar las vistas de celda de tabla. Pero esto no tiene ningún efecto.
¿Hay alguna manera de forzar a una celda a volver a dibujar con una nueva altura cuando se gira el dispositivo?
EDITAR: He intentado lo siguiente, a ningún efecto:
- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
[self.tableView reloadData];
}
Esto es lo que la aplicación se ve como en orientación vertical:
Esto es lo que la aplicación se ve como en orientación horizontal:
Hay un espacio entre los bordes superior e inferior del contenido.
EDIT 2:
Ajuste del parámetro de tamaño a través de la anchura de la estructura de la mesa ayudaron a solucionar este problema de visualización:
CGSize s = [text sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake([tableView frame].size.width,500)];
Probé -reloadData. –
Intenté -reloadSections: withRowAnimation: en el método -shouldAutorotateToInterfaceOrientation: y esto tampoco funciona. –
Todo esto funciona si se llama después de que la vista ha sido redimensionada. Eso significa que deben estar en su estructura didRotateFromInterfaceOrientation: – rpetrich