How to expand a UISearchBar when it becomes active

谁说胖子不能爱 提交于 2019-12-23 02:46:19

问题


I have a UISearchBar that needs to be compressed (see screenshot) and then expand to a larger size when it is touched or isActive.

How would I go about doing this? Currently my search bar is placed in the view via IB.

thanks


回答1:


I would suggest adding a NSNotifcation listener for the keyboard showing/hiding notifications and based on this adjust the UISearchBar frame:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
    [nc addObserver:self selector:@selector(adjustFrame:) name:UIKeyboardWillShowNotification object:nil];
    [nc addObserver:self selector:@selector(adjustFrame:) name:UIKeyboardWillHideNotification object:nil];
}

We need to remove the listener when the view is going to disappear:

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];

    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
    [nc removeObserver:self name:UIKeyboardWillShowNotification object:nil];
    [nc removeObserver:self name:UIKeyboardWillHideNotification object:nil];
}

And now we need the 2 custom functions to adjust the frame:

- (void)adjustFrame:(NSNotification *) notification {
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];
    [UIView setAnimationBeginsFromCurrentState:YES];

    if ([[notification name] isEqual:UIKeyboardWillHideNotification]) {
        // revert back to the normal state.
        self.searchBar.frame = CGRectMake (100,50,100,self.searchBar.frame.size.Height);
    } 
    else  {
        //resize search bar
        self.searchBar.frame = CGRectMake (10,50,200,self.searchBar.frame.size.Height);    
}

    [UIView commitAnimations];
}



回答2:


Use this delegate of the search bar :

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{

  [self setTheSearchBarWithRect:newRect];//newRect is CGRect;
}

-(void)setTheSearchBarWithRect:(CGRect)frame{

   [UIView animateWithDuration:(1.5f)
                      delay:0
                    options: UIViewAnimationOptionCurveEaseInOut
                 animations:^{

                     yourSearchBar.frame   =   frame;

                 }
                 completion:^(BOOL finished){

                 }];
}

and in the below delegate call the above function with its original frame.

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar;

- (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar;



回答3:


You should just change search bar frame (location and size) on editing start and ending.

for example: on start

sbar.frame = CGRectMake(sbar.frame.origin.x - 100., sbar.frame.origin.y, sbar.frame.size.x + 100., sbar.frame.size.y);

on edit end just back control at original place:

sbar.frame = CGRectMake(sbar.frame.origin.x + 100., sbar.frame.origin.y, sbar.frame.size.x - 100., sbar.frame.size.y);


来源:https://stackoverflow.com/questions/14235452/how-to-expand-a-uisearchbar-when-it-becomes-active

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!