UICollectionview implementación de búsqueda

Tengo una UICollectionview incrustada en un UIViewController . También agregué una barra de búsqueda al UIViewController como en una UICollectionview, no sé dónde colocarlo a través de Storyboard. Esperaba que la búsqueda en una UICollectionview fuera tan simple como en una Tableview . Pero parece tener sus propias reglas. ¿Hay algún ejemplo bueno y fácil que muestre cómo implementar una búsqueda simple en una UICollectionview como en una UITableview ? Quiero lograr que el usuario pueda escribir en la barra de búsqueda y UICollectionview muestre los resultados. Encontré una solución para implementar una searchbar :

 - (void)viewDidLoad { [super viewDidLoad]; self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.collectionView.frame), 44)]; self.searchBar.autocorrectionType = UITextAutocorrectionTypeNo; self.searchBar.delegate = self; [self.collectionView addSubview:self.searchBar]; [self.collectionView setContentOffset:CGPointMake(0, 44)]; } - (void) viewWillAppear:(BOOL)animated{ // to show search bar [self.collectionView setContentOffset:CGPointMake(0, 0)]; // to hide search bar [self.collectionView setContentOffset:CGPointMake(0, 44)]; } -(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar { [searchBar setShowsCancelButton:YES animated:YES]; } -(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar { [searchBar setText:@""]; [searchBar setShowsCancelButton:NO animated:YES]; [searchBar resignFirstResponder]; } 

Esto funciona bien y muestra una searchbar que es un buen comienzo, pero ahora ya no puedo ver mi encabezado porque la searchbar encuentra sobre el encabezado. ¿Alguna idea de cómo colocarla encima del encabezado? El color verde es el encabezado.

Searchbar sobre Headerview

La forma en que lo hice en mi aplicación consiste en configurar las Inserciones de contenido superiores a 44, que es la altura pnetworkingeterminada de UISearchBar en mi ViewDidLoa:

 [self.collectionView setContentInset:UIEdgeInsetsMake(44, 0, 0, 0)]; 

y luego agrego el UISearchBar y establezco su punto Y a -44 y 44 para la altura.

 UISearchBar *searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, -44, self.view.frame.size.width, 44.0)]; [self.collectionView addSubview:searchBar]; 

Una forma de hacerlo es agregar la barra de búsqueda en la vista de encabezado de la vista de colección. Use the - (UICollectionReusableView *)collectionView: (UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath method.

Código de muestra –

 - (UICollectionReusableView *)collectionView: (UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath { //Custom class for the header view. Controls are defined in the Storyboard HeaderView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind: UICollectionElementKindSectionHeader withReuseIdentifier:@"HeaderView" forIndexPath:indexPath]; /* // Header view customization code */ [headerView.filterButton setImage: [[UIImage imageNamed:@"ButtonImage.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] forState:UIControlStateNormal]; CGFloat spacing = 5; // the amount of spacing to appear between image and title headerView.filterButton.imageEdgeInsets = UIEdgeInsetsMake(0, 0, 0, spacing); headerView.filterButton.titleEdgeInsets = UIEdgeInsetsMake(5, spacing, 0, 0); NSString *buttonTitle = @"Button Title"; [headerView.filterButton setTitle:buttonTitle forState:UIControlStateNormal]; headerView.backgroundColor = [UIColor networkingColor]; /* // Add the Search Bar */ UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(headerView.frame), 44)]; searchBar.autocorrectionType = UITextAutocorrectionTypeNo; searchBar.delegate = self; [headerView addSubview:searchBar]; return headerView; } 

Intente configurar la inserción de la sección en el layout de la vista de la colección. Suponiendo que está utilizando un layout de flujo, llame

 [(UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout setSectionInset:UIEdgeInsetsMake(64,0,0,0)]; 

en viewDidLoad .

O bien, puede implementar este método de delegado de layout de flujo UICollectionViewDelegateFlowLayout ,

 - (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { return UIEdgeInsetsMake(64,0,0,0); } 

para un mejor control

Retire CGRectGetWidth(self.collectionView.frame) y configure el ancho manual en su lugar, luego reorganice finamente con él. Porque está agregando subvista a la vista de colección ¿verdad? No es necesario configurar collectionView.frame .

  self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(2, 10, 70, 44)];