将searchBar和UITabelViewController可以实现如下图所示的搜索效果
但如果这样来写,在滚动tableview的时候,searchBar会也会随着tableview滚动,如果在tableview滚动的时候,searchBar固定,可以使用searchbar,UIViewcontroller和UITableView来实现
-(void)setupSearchBar
{
UISearchBar *searchBar = [[UISearchBar alloc] init];
searchBar.translatesAutoresizingMaskIntoConstraints = NO;
self.searchBar = searchBar;
self.searchBar.delegate = self;
[self.view addSubview:searchBar];
}
-(void)setupContainerView
{
<span style="font-family: Arial, Helvetica, sans-serif;">UITableView </span><span style="font-family: Arial, Helvetica, sans-serif;">*containerView = [[UITableView alloc] init];</span>
containerView.translatesAutoresizingMaskIntoConstraints = NO;
self.containerView = containerView;
[self.view addSubview:containerView];
}
-(void)setupSearchDisplayController
{
UISearchDisplayController *searchController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar contentsController:self];
searchController.delegate = self;
searchController.searchResultsDataSource = self;
searchController.searchResultsDelegate = self;
self.displayController = searchController;
}
-(void)setupConstraint
{
NSDictionary *viewDict = @{@"containerView":self.containerView,
@"searchBar":self.searchBar};
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|[searchBar]|" options:0 metrics:nil views:viewDict];
[self.view addConstraints:constraints];
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[searchBar(44)]" options:0 metrics:nil views:viewDict];
[self.view addConstraints:constraints];
NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:self.searchBar attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0f constant:64.0f];
[self.view addConstraint:constraint];
self.searchBarVerticalContraint = constraint;
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|[containerView]|" options:0 metrics:nil views:viewDict];
[self.view addConstraints:constraints];
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[containerView]|" options:0 metrics:nil views:viewDict];
[self.view addConstraints:constraints];
constraint = [NSLayoutConstraint constraintWithItem:self.containerView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0f constant:108.0f];
[self.view addConstraint:constraint];
self.tableViewVerticalConstraint = constraint;
}
-(BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar
{
self.searchBarVerticalContraint.constant = 64.0f;
self.tableViewVerticalConstraint.constant = 108.0f;
return YES;
}
-(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
self.searchBarVerticalContraint.constant = 20.0f;
[UIView animateWithDuration:0.3f delay:0.0f options:0 animations:^{
[self.view layoutIfNeeded];
} completion:nil];
self.tableViewVerticalConstraint.constant = 64.0f;
}