2012-09-25 16 views
5

Estoy tratando de agregar una UIView arriba de una UITableView. La intención es que a medida que el usuario tira el contenido hacia abajo (como lo haría normalmente con un pull-to-refresh), en lugar de mostrar el fondo de UITableView, la UIView encima de la mesa debería permanecer pegada a la UITableViewCell superior que se desliza hacia abajo . A medida que el usuario se desplaza hacia otro lado (el contenido sube), UIView desaparecería como si fuera solo la parte superior de UITableViewCell.Creciendo encabezado en UITableView mientras el usuario saca

Puede ver esta implementación en Ruta (desplegar la línea de tiempo y expandir la imagen de perfil superior, example at 0:15) y la nueva aplicación de Facebook (con el mapa creciendo por encima de la lista de lugares cercanos).

No estoy seguro de cuál es la mejor manera de hacerlo. Creo que para lograr un efecto similar, tendrías que tener UIView como primera celda. Pero this question me tiene un poco preocupado por tratar de cambiar el tamaño de la altura de la celda a medida que se desplazan. En teoría, el cambio de tamaño solo tiene que suceder a medida que se despliegan, no hacia arriba, si es solo la parte superior de UITableViewCell.

Editar: actual código - usando sugerencia de rummad estoy añadiendo un observador en la ruta de acceso clave para tableview contentOffset y cambiar el tamaño de la altura de la celda basándose en eso, sino que está saltando por todo el lugar.

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ 
    if (self.tableView == (UITableView*)object) { 
     if ([keyPath isEqualToString:@"contentOffset"]) { 
      CGPoint scrollLoc = self.tableView.contentOffset; 
      if (scrollLoc.y < 0) { 
       NSLog(@"offset:%@", NSStringFromCGPoint(scrollLoc)); 
       headerSize = 100 - scrollLoc.y; 
       [self.tableView beginUpdates]; 
       [self.tableView endUpdates]; 
      } 
     } 
    } 
} 
+0

trate de poner otra vista en el interior de la cabecera y el estiramiento de eso. Estaba teniendo el mismo problema cuando intenté modificar el rect de la vista del encabezado. – Stuart

Respuesta

12

De hecho, parece que hay algunas bibliotecas, y usar la primera celda de la tabla no es el camino a seguir. "Parallax" parecía ser el término mágico de Google.

http://rowboatrevolution.com/2012/02/uitableview-parallax-background-a-la-path/ https://github.com/Rheeseyb/RBParallaxTableViewController

+0

El OP no solicita el término mágico de google "paralaje", sino un encabezado creciente que se pega a la parte superior y crece con tableView arrastrando (abajo) –

4

En el método de viewDidScroll: delegado realizar el seguimiento del contentOffset para su UITableView. Luego puede establecer el marco de UIView según corresponda.

+0

¿Desea publicar aquí un código de muestra? –

Cuestiones relacionadas