UITableView en storyboard no actualiza el tamaño de contenido en la rotation

Estoy trabajando en un proyecto dirigido para iOS 6 que aprovecha los storyboards y el layout automático. En el guión gráfico hay muchos lugares donde se agrega un UITableView como subvista a una vista de controlleres de vista. Esta vista de tabla usa celdas prototipo del guión gráfico.

El problema con el que nos encontramos es que si el controller de vista se carga inicialmente en orientación horizontal y el dispositivo se gira a vertical, la vista de tabla comienza a desplazarse tanto vertical como horizontalmente. Las celdas de las vistas de la tabla se dibujan con las dimensiones correctas, pero hay espacio en blanco adicional a la derecha.

Parece que mientras el marco y los límites de la vista de tabla se actualizan al tamaño correcto en rotation, el tamaño de contenido de las vistas de tabla no lo está. Independientemente de cualquier cambio de rotation de actualización, el tamaño de contenido sigue siendo las mismas dimensiones.

El problema no se presenta si se usan celdas de vista de tabla programáticas. Algunos trabajos chillones que he encontrado, 1.) llamando a reloadData o reloadRowsAtIndexPaths: withRowAnimation: 2.) configurando manualmente la propiedad contentSize.

Ambos parecen poco ideales.

Agregué este enlace a un proyecto de muestra simple y muerto que demuestra este problema. Los únicos cambios realizados son el guión gráfico y la implementación de los controlleres de vista principal.

Antes de la rotation Antes de la rotación Despues de la rotacion Despues de la rotacion

Estoy teniendo el mismo problema, parece que no puede encontrar ninguna respuesta documentada relacionada con esto. Terminé modificando manualmente el contenido de UITableView como mencioné en:

- (void) viewWillLayoutSubviews { self.tableView.contentSize = CGSizeMake(self.tableView.frame.size.height, self.tableView.contentSize.height); } 

Me encontré con este problema hoy y archivé un informe de errores con Apple.

Aparece que si está utilizando una celda personalizada con un elemento de interfaz de usuario Y autoLayout, el tamaño de contenido de UIScrollView está teniendo problemas.

Si elimina todos los elementos de la interfaz de usuario, O desactiva la opción AutoLayout, O utiliza una celda de fábrica (básica, etc.), todo funciona bien.

Tuve el mismo problema … Encontré este enlace. Cuando intenté implementar esto, no encontré los attributes de tamaño automático para mi vista, entonces hice clic en Master View Controller y luego hice clic en el File Inspector y deseleccioné Use Autolayout y luego en el Attributes inspector el networkingimensionamiento automático debería estar allí. puede cambiar los attributes cómo lo desea. Estoy seguro de que debes haber logrado resolver esto, pero espero que esto ayude a alguien más … 🙂

Aparece que si está utilizando una celda personalizada con un elemento de interfaz de usuario Y autoLayout, el tamaño de contenido de UIScrollView está teniendo problemas.

Tuve que apagar AutoLayout para mi UITableViewCells personalizado para poder desplazarme hacia abajo al actualizar los datos y luego [self.tableView reloadData].

Con AutoLayout activado, se actualizó tableView.contentSize, pero aún no pude desplazarme hasta la parte inferior a less que haya girado el dispositivo.

Encontré lo siguiente para trabajar para mí:

 - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; dispatch_async(dispatch_get_main_queue(), ^{ self.tableView.contentSize = CGSizeMake(self.tableView.frame.size.width, self.tableView.contentSize.height); }); } 

Observe el envío asíncrono: si esa línea se ejecutara sincrónicamente, el cambio contentSize dispararía otro pase de layout antes de que el actual se hubiera completado. Esto desencadena una exception:

El layout automático sigue siendo necesario después de enviar -viewDidLayoutSubviews al controller de vista.

El uso de restricciones me ayudó. Dado que está utilizando Storyboards, es muy fácil establecer valores de Constraint para todos los bordes, por lo que UITableView siempre llenará todo el ViewController (por supuesto, si UITableView llena el ViewController integer) independientemente de la orientación del dispositivo.

Mismo problema que he rectificado en mi proyecto. Creo que este es un error en Storyboard.

Luego lo he resuelto mediante encoding manual en el método willAutorotate configurando

 tableview.contentsize = CGSizeMake(tableview.width, tableview.contentsize.height); 

Espero que esto funcione para usted también.

Si encuentra alguna documentation sobre Apple con respecto a la misma, por favor, actualíceme también. Hasta entonces puedes usar la misma solución.