2012-07-17 19 views
6

Quiero crear una interfaz de usuario similar a la aplicación de mensajes de Apple en el iPhone. Tengo una vista de tabla y un campo de texto debajo. Cuando selecciono el campo de texto, animo el contenido de la vista de tablaIniciar a medida que el teclado se desliza hacia arriba para que el contenido se muestre sobre el teclado.¿Cambiar el contenido de UITableView sin cambiar su contentOffset?

Tengo un código que utiliza un reconocedor de gestos pan para detectar cuando el usuario se desplaza hacia abajo de la vista de tabla y anima el teclado mientras esto sucede (si ve la aplicación Mensajes de Apple, tiene la misma funcionalidad para cerrar el teclado Desplácese hacia abajo en la vista de tabla y, a medida que su dedo se desliza más allá del campo de texto, el teclado se cae con él.

Esto funciona muy bien, pero si la vista de tabla se desplaza hacia arriba y empiezo a cambiar su contenido mientras el teclado se desliza hacia abajo, la vista de tabla se desplaza hacia arriba y luego hacia atrás para causar una animación desigual . Me imagino que esto se debe a que al cambiar el contentInset se restablece el contentOffset en la parte superior de la vista de tabla si la vista de tabla se desplaza más allá de la parte superior, y esto hace que parezca extraño.

¿Alguien sabe cómo cambiar el contenidoInserción de una vista de desplazamiento sin cambiar su contentOffset?

Respuesta

7

Logré que todo funcione a la perfección con una pequeña solución. Acabo de hacer esto:

// in a method that gets repeatedly called as the pan gesture recognizer changes 
if([tableView contentOffset].y > 0) { 
    UIEdgeInsets insets = [tableView contentInsets]; 
    inset.bottom = currentKeyboardHeight; 
    [tableView setContentInset:inset]; 
} 

de manera que las inserciones no se cambiarían si el contentOffset estaba en la parte superior o desplaza más allá de la parte superior. Si la tabla se desplaza un poco hacia abajo y se arrastra, cambiará las inserciones hasta que llegue a la parte superior, y luego dejará de cambiarlas para que no ocurra el extraño parpadeo.


Editar: averiguado la causa subyacente y pensé que iba a actualizar este lugar de sólo dejar la solución. Lo que estaba haciendo era mezclar un CGAffineTransformMakeTranslation en el medio de mis cálculos de marco, que es un gran no-no según la documentación de Apple. Cuando la propiedad transform no es CGAffineTransformIdentity, el frame se vuelve indefinido, y esto causó un comportamiento muy extraño si desplacé la vista de tabla y cambié sus inserciones de contenido al mismo tiempo.

Cuestiones relacionadas