Pregunta

Tengo una subclase de UITableViewController. Tengo el código que puede añadir / eliminar una UISearchBar a / desde el tableHeaderView de mi tableView. Aquí está el código que tengo para llevar a cabo estas tareas:

self.tableView.tableHeaderView = uiSearchBar; //Make the search bar appear
self.tableView.tableHeaderView = nil; //Make the search bar disappear

El problema es que quiero que la adición / eliminación de la UISearchBar ser animado; deslice a la vista desde la parte superior cuando lo añado a continuación, deslice hacia arriba y fuera de la vista cuando lo saco en lugar de simplemente aparecer y desaparecer. ¿Alguna sugerencia?

Gracias.

¿Fue útil?

Solución

I finalmente fue capaz de resolver esto. Resultó ser bastante simple. En lugar de añadir el UISearchBar a la cabecera de la tabla, inserto en la primera celda de la tabla con la animación UITableViewRowAnimationTop y quitarlo usando el mismo método. Esto se traduce en la barra de deslizamiento dentro y fuera de la parte superior. Aquí está el código que hace que la barra aparecer:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.baseUiTableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationTop];
[self.baseUiTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];

Y aquí está el código que elimina la barra de búsqueda:

[uiSearchBar resignFirstResponder];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.baseUiTableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationTop];

Otros consejos

Una manera mucho más simple que también es adecuado para UITableViewStyleGrouped (más No es necesario cambiar el número de filas) es para animar la contentInset de la tabla:

CGFloat h = uiSearchBar.bounds.size.height;
UITableView *tv = self.tableView;
if (tv.tableHeaderView)
{  // hide bar
   [UIView animateWithDuration:0.3 animations:^{
      tv.contentInset = UIEdgeInsetsMake(-h, 0, 0, 0);
   } completion:^(BOOL finished) {
      tv.contentInset = UIEdgeInsetsZero;
      tv.tableHeaderView = nil;
      [tv scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
   }];
}
else
{  // show bar
   uiSearchBar.frame = CGRectMake(0, -h, tv.frame.size.width, h);
   [UIView animateWithDuration:0.3 animations:^{
      [tv scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
      tv.tableHeaderView = uiSearchBar;
   }];
}

Sé que esto es tres años después de la OP hizo la pregunta, pero ya que esta es una buena alternativa para lograr el efecto deseado, pensé que podría ser útil para otras personas que cumplen el mismo problema.

Trate de tener su vista de tabla de desplazamiento-animado-modo que sólo la fila debajo de la barra de búsqueda es visible, a continuación, quitar la barra de búsqueda, y vaya a la misma fila y sin animación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top