iOS SearchDisplayController prevents tableview from background color change (background stays gray)

后端 未结 3 1788
南方客
南方客 2020-12-09 07:07

This might be a bug in iOS 7: I used storyboard to drag in Search Bar and Search Display Controller in my tableview controller. The background color of my t

3条回答
  •  天命终不由人
    2020-12-09 07:48

    When using a UISearchDisplayController in a UITableViewController, it is very important to remember that you are dealing with two table views.

    So when you drag a "Search Bar and Search Display Controller" into a UITableView (and assuming you are doing this drag in a UIStoryboard), you are actually added another UITableView that, when activated, must be managed by code in your UITableViewController file in the same manner as any other UITableView.

    Consider this:

    The UITableView that represents the complete data set can be called using self.tableView (or as you have written, the synthesised _tableView).

    The UITableView that represents the filtered data set (filtered using your search criteria) can be called using self.searchDisplayController.searchResultsTableView

    If you'd like both your default UITableView and search UITableView background colour to display a black colour, I can suggest this code (works in a TVC in my app)...

    - (void)viewDidLoad {
        [super viewDidLoad];
    
        [self.tableView setBackgroundView:nil];
        [self.tableView setBackgroundColor:[UIColor blackColor]];
    
        [self.searchDisplayController.searchResultsTableView setBackgroundView:nil];
        [self.searchDisplayController.searchResultsTableView setBackgroundColor:[UIColor blackColor]];
    }
    

    ...

    UPDATE

    Now that I have finished my long-winded lecture, I agree that there is in fact a "bug" of sorts in Xcode. If you delete the original UISearchBar and then add a new one to a UITableViewController, before you connect it, do a Build & Run. A black background is visible below and above the table view. It is only after you set the UISearchBar as an outlet for the UISearchDisplayController that the black background is "replaced" with a grey background.

    So the solution...

    With thanks to Olof's answer to Different background colors for the top and bottom of a UITableView.

    REPLACE the code I have written above with this code, at the end of your viewDidLoad method:

    - (void)viewDidLoad {
        [super viewDidLoad];
    
        ......
    
        CGRect frame = self.tableView.bounds;
        frame.origin.y = -frame.size.height;
        UIView* viewBackgroundBlack = [[UIView alloc] initWithFrame:frame];
        [viewBackgroundBlack setBackgroundColor:[UIColor blackColor]];
        [self.tableView addSubview:viewBackgroundBlack];
    
        [self.tableView setBackgroundView:nil];
        [self.tableView setBackgroundColor:[UIColor blackColor]];
    
        [self.searchDisplayController.searchResultsTableView setBackgroundView:nil];
        [self.searchDisplayController.searchResultsTableView setBackgroundColor:[UIColor blackColor]];
    }
    

提交回复
热议问题