Cómo hacer que la barra de navigation sea como Instagram

Necesito implementar algo como esto:

NavBar se mantiene en la parte superior, tableView rebota

tableView debe rebotar, pero no la barra de navigation.

Probé varias variantes diferentes. Algo como esto:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { CGRect imageViewFrame = self.imageView.frame; CGRect tableViewFrame = self.tableView.frame; //ImageView - is top view(instead of NavBar) //defaultHeight - is default height of tableView imageViewFrame.origin.y = MIN(0, MAX(-scrollView.contentOffset.y, -100)); tableViewFrame.origin.y = imageViewFrame.origin.y + 100; tableViewFrame.size.height = defaultHeight - imageViewFrame.origin.y; self.imageView.frame = imageViewFrame; self.tableView.frame = tableViewFrame; } 

Toma esto:

12

no es adecuado porque en el tamaño de Instagram de tableView no cambia (basta con mirar los indicadores de desplazamiento, si el tamaño de tableView cambió, también cambiaron)

mira los indicadores de desplazamientomira los indicadores de desplazamiento

También intenté agregar View como subView en tableView, funciona, pero no exactamente lo que necesito es. En la barra de navigation de Instagram, fuera de tableView, no es adecuado.

En la barra de búsqueda de la aplicación de Facebook se comporta exactamente igual

introduzca la descripción de la imagen aquí

¿Alguien puede ayudarme?

¡Gracias!

Tenga el mismo enfoque en el código de ejemplo, pero en lugar de boost la altura de la tabla, tendrá que precargarlo con la altura adicional (no visible) y simplemente moverlo hacia arriba al disminuir el marco de y. La altura adicional estará fuera de la pantalla. Si la altura del contenido no es lo suficientemente grande como para salir de la pantalla, entonces no necesita tener la altura fuera de la pantalla.

Agregue un encabezado con altura = 0 al inicio, y mientras se desplaza hacia abajo aumenta el tamaño, hasta 100 (el encabezado vacío se desactivará ahora). De esa forma, el contenido no se cortará a medida que se desplaza.

La "barra de navigation" de instagram no es una barra de navigation. Es un encabezado de sección de tabla. Notarás que cuando tocas una foto, se desliza toda la barra de navigation. Eso es porque es parte del controller de vista de tabla y no es una barra de navigation "real".

Puede lograr esto usando un UINavigationController pero ocultando la barra de navigation (setNavigationBarHidden: YES). Simplemente llama a pushViewController: animated: manualmente cuando quiere presionar.

Curiosamente, parece que las otras tabs de Instagram solo usan una barra de navigation normal y no hacen nada lujoso. Supongo que realmente querían esos 44 puntos en la pantalla de alimentación principal.

Si estás orientado a iOS 5+ de lo que puedes personalizar fácilmente la barra de navigation de esta forma:

1- Agregue su TableViewController dentro de un UINavigationController

2- Personalizar la barra de navigation:

Establecer image de background para la barra de navigation

 [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"bar_background"] forBarMetrics:UIBarMetricsDefault]; 

Agregar button de actualización en el lado derecho

 UIImage *img = [UIImage imageNamed:@"refresh.png"]; UIButton *rButton = [UIButton buttonWithType:UIButtonTypeCustom]; [rButton setImage:img forState:UIControlStateNormal]; [rButton addTarget:vc action:@selector(didTapRefreshButton:) forControlEvents:UIControlEventTouchUpInside]; rButton.frame = CGRectMake(0.0f, 0.0f, img.size.width, img.size.height); UIBarButtonItem *rButtonItem = [[UIBarButtonItem alloc] initWithCustomView:rButton]; self.navigationItem.rightBarButtonItem = rButtonItem; [rButtonItem release]; 

¡Espero que ayude!

Puede utilizar el método mencionado a continuación en su class en el que desea agregar efecto en la barra de navigation como en Instagram.

  - (void)scrollViewDidScroll:(UIScrollView *)sender { //Initializing the views and the new frame sizes. UINavigationBar *navbar =self.navigationController.navigationBar; UIView *tableView = self.view; CGRect navBarFrame = self.navigationController.navigationBar.frame; CGRect tableFrame = self.view.frame; //changing the origin.y based on the current scroll view. //Adding +20 for the Status Bar since the offset is tied into that. if (isiOS7) { navBarFrame.origin.y = MIN(0, MAX(-44, (sender.contentOffset.y * -1))) +20 ; tableFrame.origin.y = navBarFrame.origin.y + navBarFrame.size.height; }else{ navBarFrame.origin.y = MIN(0, (sender.contentOffset.y * -1)) +20; tableFrame.origin.y = MIN(0,MAX(-44,(sender.contentOffset.y * -1))) ; } navbar.frame = navBarFrame; tableView.frame = tableFrame; }