2010-07-29 9 views
7

Lorsque vous faites défiler une table vers le bas (Notes.app), la barre de recherche reste fixe, mais lorsque vous faites défiler une table, la barre de recherche est masquée. C'est ce que je veux. En regardant l'indicateur de défilement, il apparaît que UISearchBar est une sous-vue de la vue défilante d'une table. Mais si j'ajoute une barre de recherche à une tableView dans Interface Builder, elle défile toujours attachée à une tableView comme une ligne régulière.Comment répliquer le comportement de défilement UISearchBar dans Notes.app?

+0

tout code que nous pouvons voir ou tester en sont l'application – user841836

Répondre

4

Dans la vue de table, placez un UIView transparent vide (searchBarPlaceholderView) dans le logement tableHeaderView, qui a exactement les dimensions d'un UISearchBar. Ajoutez ensuite l'UISearchBar (searchBar) à la vue de niveau supérieur.

Ensuite, dans votre délégué de vue de la table, ajoutez

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    CGRect sbFrame = searchBar.frame; 
    sbFrame.origin.y = searchBarPlaceholderView.frame.origin.y - scrollView.contentOffset.y; 

    // it cannot move from the top of the screen 
    if (sbFrame.origin.y > 0) { 
     sbFrame.origin.y = 0; 
    } 

    searchBar.frame = sbFrame; 
} 
1

C'est le comportement par défaut. Vous avez juste à laisser tomber la barre dans le premier en-tête de la table (je suppose que c'est la section 0).

Cependant, je viens de créer une nouvelle application avec un UITableViewController et, à travers l'Interface Builder, j'ai déposé l'UISearchBar dans la partie supérieure de la tableView et il se comporte comme l'application Notes.app.

+0

Non, ce n'est pas, du moins pour moi. Essayez de faire glisser la table vers le bas - la barre de recherche la suivra tout le long. Dans la barre de recherche Notes.app reste attaché en haut. – Indoor

+0

Oh, maintenant j'ai compris. En regardant Notes.app, il semble que la barre de recherche ne fait pas partie de la table, mais elle est rendue telle quelle (juste au moment où vous faites défiler vers le haut ou vers le bas). –

1

Ajouter la barre de recherche à la vue de la table dans le constructeur d'interface comme normale (c'est-à-dire la barre de recherche devrait être une sous-vue de la table).

mettre en œuvre cette méthode dans le délégué:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    UISearchBar *searchBar = self.searchDisplayController.searchBar; 
    if(scrollView.contentOffset.y <= 0) { 
     searchBar.frame = CGRectMake(0, scrollView.contentOffset.y, searchBar.frame.size.width, searchBar.frame.size.height); 
    } 
} 
Questions connexes