2012-09-21 23 views
8

Estoy trabajando en el proyecto dirigido para iOS 6 que aprovecha los guiones gráficos y el diseño automático. En el guión gráfico, hay muchos lugares donde se agrega una UITableView como subvista a una vista de controladores de vista. Esta vista de tabla usa celdas prototipo del guión gráfico.UITableView en el guión gráfico no está actualizando el tamaño del contenido en la rotación

El problema al que nos enfrentamos es que si el controlador 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 vistas de tabla se dibujan con las dimensiones correctas, pero hay espacio en blanco adicional a la derecha.

Parece que, aunque el marco y los límites de la vista de tabla se actualizan con el tamaño correcto en la rotación, el tamaño de contenido de las vistas de tabla no lo está. Independientemente de cualquier cambio de rotación de actualización, el tamaño del contenido sigue siendo el mismo.

El problema no se presenta si se utilizan celdas de tabla de tabla programática. Un poco de trabajo chillón que he encontrado, 1.) llamar a reloadData o reloadRowsAtIndexPaths: withRowAnimation: 2.) establecer manualmente la propiedad contentSize.

Ambos parecen menos que ideales.

He añadido este link to a dead simple sample project que demuestra este problema. Los únicos cambios realizados son en el guión gráfico y la implementación de los controladores de vista principales.

Antes de rotación Before rotation Después de la rotación After rotation

+0

Estoy confundido. En tu ejemplo, parece estar funcionando. – mkral

+0

@mkral está roto para mí cuando ejecuto Xcode 4.5. Si inicia la aplicación en horizontal, luego gira a vertical, la vista de tabla se desplazará vertical y horizontalmente. – Paul

+0

OK, soy tonto. Pensé que el retrato era el problema. Nunca volví. – mkral

Respuesta

6

estoy teniendo el mismo problema - no puede parece encontrar una respuesta documentada en relación con esto. Terminé modificar manualmente la UITableView contentSize como usted mencionó en:

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

No puedo hacer que esto funcione para mi problema. Estoy viendo básicamente el mismo problema, en el diseño de Master-Detail. Tengo un UIViewController en el Controlador de detalles, que contiene una vista de tabla. Cuando giro el iPad, la vista de tabla simplemente no cambiará de tamaño. –

+0

Estoy leyendo los tutoriales iOS6 de Ray Wenderlich, y las cosas de diseño automático tienen algo específico sobre las tablas. Aún no lo he probado, pero parece que las cosas de la tabla en realidad tienen que configurarse por separado y luego cargarse en un contenedor en el UIViewController. No estoy seguro de esto en absoluto. Esperando llegar a él más tarde esta tarde. Si encuentro algo definitivo, lo actualizaré aquí. –

+0

Intenta usar ** - (void) viewDidLayoutSubviews { [super viewDidLayoutSubviews]; self.tableView.contentSize = CGSizeMake (self.tableView.frame.size.height, self.tableView.contentSize.height);} ** –

1

me encontré con este problema hoy en día, y presentaron un informe de error con Apple.

Parece que si está utilizando una celda personalizada con un elemento UI Y autodiseño, el tamaño del contenido UIScrollView tiene problemas.

Si elimina todos los elementos de la interfaz de usuario, apaga el autodiseño o utiliza una celda de fábrica (básica, etc.), todo funciona bien.

-1

Mismo problema lo he rectificado en mi proyecto. Supongo que esto es un error en Storyboard.

Luego lo he resuelto por la codificación manual en el método willAutorotate estableciendo

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

la esperanza que esto funcionará para usted también.

Si encuentra alguna documentación de apple con respecto a la misma, por favor, actualice también. Hasta entonces puedes usar la misma solución.

+0

¿Qué enlace? ¿Qué quieres decir? – Mrunal

0

Parece que si está utilizando una celda personalizada con un elemento UI Y autoLayout, el tamaño del contenido UIScrollView tiene problemas.

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

Con AutoLayout activado, el tableView.contentSize se estaba actualizando, pero todavía no podía desplazarme hacia abajo a menos que girara el dispositivo.

1

Tuve el mismo problema ... Encontré this enlace. Cuando traté de implementar esto, no encontré los atributos de Auto-Sizing para mi vista, luego hice clic en Master View Controller y luego hice clic en File Inspector y desmarqué Use Autolayout y luego en Attributes inspector, el cambio de tamaño automático debería estar allí, entonces puede cambiar los atributos de cómo lo quieres. Estoy seguro de que debe haber logrado resolver esto, pero espero que esto ayudará a alguien más ... :)

0

me encontré con 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); 
    }); 
} 

Aviso el envío asíncrono: si esa línea se ejecutara sincrónicamente, el cambio del tamaño del contenido provocaría otro pase de diseño antes de que el actual se hubiera completado. Esto desencadena una excepción:

Todavía se requiere diseño automático después de enviar -viewDidLayoutSubviews al controlador de vista .

0

Uso de Restricciones me ayudó. Como está utilizando Storyboards, es muy fácil establecer valores de restricción para todos los bordes, por lo que UITableView siempre ocupará todo el ViewController (por supuesto, si UITableView llena el ViewController completo) independientemente de la orientación del dispositivo.

Cuestiones relacionadas