2012-03-16 11 views
5

Tengo un UITableView con celdas personalizadas. Naturalmente, en cellForRowAtIndexPath trato de dequear una celda vieja y reutilizarla. Cada celda tiene una jerarquía de vistas retocadas: establecí el marco de la vista superior cuando establecí su contenido en cellForRowAtIndexPath, y sus subvistas cambian sus marcos en consecuencia. Tenga en cuenta que la altura de la fila también es dinámica. Todo funciona bien cuando me desplazo por la tabla (con las filas de diferentes contenidos y marcos). Pero también tengo un campo de texto en la misma vista que esta tabla, así que necesito desplazar el contenido de la tabla para compensar el teclado que se muestra/oculta. Animo propiedad contentInset para ello:Animando contentInset a UITableView también anima cuadros de 'subvistas' de filas

// Called when the UIKeyboardWillHideNotification is sent 
- (void)keyboardWillBeHidden:(NSNotification*)aNotification 
{ 
    NSTimeInterval animationDuration = [[aNotification.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue]; 
    UIViewAnimationCurve animationCurve = [[aNotification.userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue]; 

    [UIView setAnimationCurve:animationCurve]; 
    [UIView animateWithDuration:animationDuration animations:^{ 
     messagesTable.contentInset = UIEdgeInsetsMake(0, 0, kHSTableBottomInset, 0); 
     messagesTable.scrollIndicatorInsets = UIEdgeInsetsZero; 
    }]; 
} 

Funciona bien también, pero hay un problema técnico interesante: cuando el teclado está oculto y contentInset está animado volver a la normalidad (kHSTableBottomInset es un valor pequeño como para mantener el margen), recargas de mesa las celdas que se desplazarán desde arriba para mostrarse. ¡El problema es que esta recarga también se realiza dentro del bloque de animación! Como resultado, cuando cambio el marco de la subvista descuelgada (específicamente, el ancho) en cellForRowAtIndexPath (que se llama como parte o recarga), este cambio también se anima y se ve cuando la celda se desplaza hacia abajo para ver. ¿Puedo evitar este tipo de comportamiento?

Respuesta

-1

solucionado este problema estableciendo clipsToBounds a tableview.

tableView.clipsToBounds = YES: 

Y si todavía tiene problemas, establecer clipsToBounds-footerview también.

Cuestiones relacionadas