Desmond
Desmond

Reputation: 5001

searchDisplayControllerWillEndSearch not resizing searchbar

Just wondering why and need to solve it. i have this searchbar looks like this. enter image description here

which clicked will move up to the top and expend to 0,0,320,searchbar's height.

enter image description here

which clicked Cancel, it should resize back to 33,55,270, searchbar's height. but it doesn't

enter image description here

the searchDisplayControllerDidEndSearch will work to resize back, however there is a 1 sec lag that user could see the changes. any body why in searchDisplayControllerWillEndSearch the animation resize wound't work ?.

thanks for the comments and feedback.

- (void) searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller
{

    [UIView animateWithDuration:.1
                     animations:^{ 

    controller.searchResultsTableView.frame = frogTableView.frame;
    searchDisplayController.searchResultsTableView.frame = frogTableView.frame;

    searchDisplayController.searchBar.frame = CGRectMake(32,
                                                         55,
                                                         270,
                                                         searchDisplayController.searchBar.frame.size.height);

    searchBar.frame = CGRectMake(32,
                                 55,
                                 270,
                                 searchBar.frame.size.height);
                         frogTableView.frame = CGRectMake(frogTableView.frame.origin.x, 
                                                          121, 
                                                          frogTableView.frame.size.width, 
                                                          frogTableView.frame.size.height);

                         notePad.frame = CGRectMake(notePad.frame.origin.x, 
                                                    45, 
                                                    notePad.frame.size.width, 
                                                    notePad.frame.size.height);

                         searchDisplayController.searchResultsTableView.frame = frogTableView.frame;
                      } 
                     completion:^(BOOL finished){
                         //whatever else you may need to do

                     }];
}

Upvotes: 0

Views: 718

Answers (1)

Nik Pankin
Nik Pankin

Reputation: 21

I had the same trouble after I started to use UISearchBar with UISearchDisplayController. The solution I came up with is to place a search bar on a view:

UIView * searchBarSubview = [[UIView alloc] initWithFrame:CGRectMake(0, 0, MENU_WORK_AREA_WIDTH, SEARCH_BAR_HEIGHT)] ;
searchBarSubview.autoresizesSubviews = YES;
searchBarSubview.backgroundColor = [UIColor clearColor];

UISearchBar * globalSearchBar = [[[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, MENU_WORK_AREA_WIDTH, SEARCH_BAR_HEIGHT)] autorelease];
globalSearchBar.tintColor = [UIColor blackColor];
globalSearchBar.delegate = self;
[globalSearchBar setBackgroundImage:[UIImage alloc]];

and resize the view instead of search bar in searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller:

[UIView beginAnimations:nil context:nil];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.3];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

// Slide in to the final destination
searchBarSubview.frame = CGRectMake(0, 0, MENU_WORK_AREA_WIDTH, SEARCH_BAR_HEIGHT);

[UIView commitAnimations];

Upvotes: 2

Related Questions