iOS SearchDisplayController防止桌面背景颜色变化(背景保持灰色)
这可能是iOS 7中的一个错误:我使用storyboard在我的tableview控制器中的search栏和search显示控制器中拖动。 之后,我的tableview的背景颜色被改变了。 我正在使用AppCoda的“how-to-add-search-bar-uitableview”来演示这个问题。 我只用ViewDidLoad
1行插件更改了示例代码:
[_tableView setBackgroundColor:[UIColor blackColor]];
在这里查看我的截图:
-
tableview的底部已经变成了黑色:
-
但是,尽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];
。 有效!