resize UISearchDisplayController dimmed black overlay resize UISearchDisplayController dimmed black overlay xcode xcode

resize UISearchDisplayController dimmed black overlay


I combined several answers in order to move the dimmed overlay frame.

1: override UISearchDisplayController class

@interface MySearchController : UISearchDisplayController

2: override setActive function

- (void)setActive:(BOOL)visible animated:(BOOL)animated{[super setActive: visible animated: animated];//move the dimming part downfor (UIView *subview in self.searchContentsController.view.subviews) {    //NSLog(@"%@", NSStringFromClass([subview class]));    if ([subview isKindOfClass:NSClassFromString(@"UISearchDisplayControllerContainerView")])    {        CGRect frame = subview.frame;        frame.origin.y += 10;        subview.frame = frame;    }}}

3: change the xib/storyboard Search Display Controller from UISearchDisplayController to MySearchController


I thought the searchDisplayController owned a seperate tableview, so my guess is that you would need to resize that one.

Something along the lines of: <yourSearchViewController>.view.frame =self.tableView.frame;

or if you don't have it as class variable, in a method which receives it as argument, eg:

-(void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView {   controller.view.frame = self.tableView.frame;    tableView.backgroundColor = [UIColor colorWithRed:243.0/255.0 green:236.0/255.0 blue:212.0/255.0 alpha:1];   }

Alternativily you might want to subclass it and override its view properties locally.

Hope this helps!


The UISearchDisplayController does owns its own tableview which not as easy to tame.I came across something like this and am still looking for a better solution.

-(void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller{    [controller.searchResultsTableView setDelegate:self];       CGFloat gr = 12.0;    controller.searchResultsTableView.backgroundColor = [UIColor colorWithRed:gr green:gr blue:gr alpha:0.0];    [controller.searchResultsTableView setSeparatorStyle:UITableViewCellSelectionStyleNone];    CGRect searchTableFrame = CGRectMake(7, 105, 305, 292);    [controller.searchResultsTableView setFrame:searchTableFrame];}

The above code does sets the background to transparent but seems to silently ignore the frame size.

EDIT:SOLVEDI found the robust solution to this here.This saved my life.