uitableview ios7 uisearchbar uisearchdisplaycontroller

uitableview - Problema de animación de UISearchBar



ios7 uisearchdisplaycontroller (8)

He aplicado tu código. "Funciona bien para mí", simplemente oculta tu barra de navegación e inicia la barra de búsqueda desde y = 20, en lugar de y = 0;

Tengo un UIViewController en el que quiero mostrar una vista de tabla con el serchBar. Tan sencillo como eso:

//viewDidLoad _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH(), SCREEN_HEIGHT()) style:UITableViewStylePlain]; _tableView.delegate = self; _tableView.dataSource = self; [self.view addSubview:_tableView]; // adding uisearch bar searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; _tableView.tableHeaderView = searchBar; // searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self]; searchDisplayController.delegate = self; searchDisplayController.searchResultsDataSource = self;

El problema ocurre cuando hago clic dentro de la barra de uisearch para que la animación comience y parece que tiene un desplazamiento no deseado de 20 píxeles.


¿Por qué creas SearchBar programáticamente en lugar de StoryBoard? Actualmente estoy usando searchBar, agregado en el guión gráfico y funciona bien (tengo que cambiar el contentOffset)


En su Storyboard, seleccione el controlador problemático, mire la pestaña Atributos e intente modificar esta configuración:

  • Debajo de las barras superiores
  • Debajo de las barras opacas

He resuelto un problema similar con el desglose de esta configuración.


UITableView *_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 64, self.view.frame.size.width, self.view.frame.size.height) style:UITableViewStylePlain]; _tableView.delegate = self; _tableView.dataSource = self; [self.view addSubview:_tableView]; // adding uisearch bar UISearchBar* searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; _tableView.tableHeaderView = searchBar; // UISearchDisplayController* searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self]; searchDisplayController.delegate = self; searchDisplayController.searchResultsDataSource = self;

y simplemente embado mi controlador con UINavigationcontroller y está funcionando bastante bien ...


Encontré lo que está causando este problema. Parece que la animación se arruina cuando configuras navigationBar.translucent en NO. Si haces que tu barra de navegación sea translúcida, todo debería funcionar bien, pero definitivamente esta no es la solución ideal. Voy a intentar encontrar una solución.


Puede cancelar la animación subclasificando UISearchDisplayController y agregando esto:

- (void)setActive:(BOOL)visible animated:(BOOL)animated { if(self.active == visible) return; [self.searchContentsController.navigationController setNavigationBarHidden:YES animated:NO]; [super setActive:visible animated:animated]; [self.searchContentsController.navigationController setNavigationBarHidden:NO animated:NO]; if (visible) { [self.searchBar becomeFirstResponder]; } else { [self.searchBar resignFirstResponder]; } }


Como un recordatorio para cualquier persona con problemas similares. Necesitaba agregar esta línea que arreglaba cosas:

self.edgesForExtendedLayout = UIRectEdgeNone;


Codyko me dio una idea. Era el porque la barra de navegación no era translúcida. Así que lo configuré en translúcido en este controlador de visualización y descanso cuando me fui con el siguiente código:

- (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; self.navigationController.navigationBar.translucent = NO; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; self.navigationController.navigationBar.translucent = YES; }

Ahora que dejó la barra de navegación en este controlador ligeramente desteñida, entonces agregué un UIView del mismo color que mi barra de navegación justo detrás para que se vea opaco. Sé que no es perfecto, pero funciona bien.