iOS SearchDisplayController防止桌面背景颜色变化(背景保持灰色)

这可能是iOS 7中的一个错误:我使用storyboard在我的tableview控制器中的search栏和search显示控制器中拖动。 之后,我的tableview的背景颜色被改变了。 我正在使用AppCoda的“how-to-add-search-bar-uitableview”来演示这个问题。 我只用ViewDidLoad 1行插件更改了示例代码:

  [_tableView setBackgroundColor:[UIColor blackColor]]; 

在这里查看我的截图:

  1. tableview的底部已经变成了黑色: 在这里输入图像说明

  2. 但是,尽pipetableview的背景被设置为黑色,但是顶部保持灰色: 在这里输入图像说明 只有当我在“search栏和search显示控制器”中拖动时才会发生这种情况。 如果我从故事板中删除“search显示控制器”,这是很好的。

UITableViewController使用UISearchDisplayController时,记住你正在处理两个表视图是非常重要的。

所以,当你拖动一个“search栏和search显示控制器”到一个UITableView (并假设你这样做在UIStoryboard拖),你实际上添加了另一个UITableView ,激活时,必须由你的UITableViewController文件中的代码pipe理和其他UITableView

考虑一下:

代表完整数据集的UITableView可以使用self.tableView (或者你写的,合成的_tableView )来调用。

表示过滤的数据集(使用您的search条件过滤)的UITableView可以使用self.searchDisplayController.searchResultsTableView

如果你喜欢默认的UITableView和searchUITableView背景颜色显示黑色,我可以build议这个代码(在我的应用程序在TVC工作)…

 - (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

现在我已经完成了冗长的演讲 ,我同意Xcode中实际上有一个“bug”。 如果删除原始的UISearchBar ,然后在连接之前添加一个新的UITableViewController ,请执行Build&Run。 表格视图下方和上方都可以看到黑色背景。 只有在将UISearchBar设置为UISearchBar的出口后,黑色背景才会被灰色背景“replace”。

所以解决scheme…

感谢Olof 对UITableView顶部和底部的不同背景颜色的回答。

在你的viewDidLoad方法的末尾用这段代码replace上面写的代码:

 - (void)viewDidLoad { [super viewDidLoad]; ...<other code>... 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]]; } 

UISearchBar设置为Storyboard的标题视图时出现问题。 在UIView包装UISearchBar似乎解决了这个问题,但带来了与UISearchDisplayController兼容的其他问题。

我入侵了UI,基本上发现UITableView在顶边和头部视图之间放置了一个存根视图,它是UITableView层次结构中的第一个子视图。 更改背景颜色将不起作用,因为每次更改滚动位置都会更新它。

所以我的解决scheme是简单地为它的alpha值。 因此,我们将背景颜色委托给UITableView本身。 它在iOS 7.1上工作得很好,在这种情况下似乎是一个轻量级的补丁。

 // // Fix background color bug // This patch can be applied once in viewDidLoad if you use UITableViewController // http://stackoverflow.com/q/23026531/351305 // - (void)_fixSearchBarHeaderViewBackgroundColorBug { // First subview in UITableView is a stub view positioned between table's top edge and table's header view. UIView* stubView = [self.tableView.subviews firstObject]; // Make sure it's stub view and not anything else if([NSStringFromClass([stubView class]) isEqualToString:@"UIView"]) { // Set its alpha to zero to use background color from UITableView stubView.alpha = 0.0f; } } 

我试图使用: self.tableView.backgroundView = [UIView new]; 。 有效!