4

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

   [_tableView setBackgroundColor:[UIColor blackColor]];

在此处查看我的屏幕截图:

  1. tableview 的底部已经变成了黑色: 在此处输入图像描述

  2. 但是,尽管 tableview 的背景设置为黑色,但顶部仍保持灰色:在此处输入图像描述 仅当我拖动“搜索栏和搜索显示控制器”时才会发生这种情况。如果我从情节提要中删除“搜索显示控制器”,一切都很好。

4

3 回答 3

4

UISearchDisplayController在 a中使用 a时UITableViewController,记住您正在处理两个表视图非常重要。

因此,当您将“搜索栏和搜索显示控制器”拖动到 aUITableView中(并假设您在 a 中进行此拖动UIStoryboard)时,实际上会添加另一个UITableView,当激活时,它必须由UITableViewController文件中的代码以与任何其他UITableView.

考虑一下:

代表完整数据集的 UITableView 可以使用self.tableView(或者如您所写的,综合_tableView)调用。

代表过滤数据集(使用您的搜索条件过滤)的 UITableView 可以使用调用self.searchDisplayController.searchResultsTableView

如果您希望默认UITableView和搜索UITableView背景颜色都显示黑色,我可以建议此代码(在我的应用程序的 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]];
}

...

更新

现在我已经完成了我冗长的讲座,我同意 Xcode 中实际上存在某种“错误”。如果您删除原始文件UISearchBar,然后将新文件添加到 a UITableViewController,则在连接之前,请执行 Build & Run。在表格视图的下方和上方可以看到黑色背景。只有在您将 设置UISearchBar为 的出口后UISearchDisplayController,黑色背景才会被灰色背景“替换”。

所以解决方案...

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

viewDidLoad在你的方法结束时,用这段代码替换我上面写的代码

- (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]];
}
于 2014-04-12T06:01:21.920 回答
3

UISearchBar从 Storyboard 设置为标题视图时会出现问题。包裹似乎解决UISearchBarUIView这个问题,但带来了与UISearchDisplayController.

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

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;
    }
}
于 2014-05-08T14:05:55.100 回答
1

我尝试使用:self.tableView.backgroundView = [UIView new];。成功了!</p>

于 2016-03-29T02:28:42.560 回答