如何在UIPopoverController(iOS7)中防止UITableView分隔符颜色变黑?

时间:2013-09-30 16:13:38

标签: ios uitableview ios7 uipopovercontroller

我的应用程序使用UITableViewController,它是UINavigationController的子代,UINavigationController是UIPopoverController的内容视图控制器。我正在定制UITableViewController的UITableView的外观。它适用于iOS 5和6,但它在iOS7中存在问题。单元格的分隔符设置为白色,表格视图最初显示为正确的分隔符颜色。但是,一旦我滚动表视图并重新加载单元格(意味着调用了cellForRowAtIndexPath和willDisplayCell函数),新重新加载的单元格的分隔符都是黑色的。

我通过在UITableViewController的viewDidLoad函数中调用此函数来自定义分隔符颜色:

self.tableView.separatorColor = [UIColor whiteColor];

如果我在应用程序的其他地方使用完全相同的表视图(而不是在UIPopoverController中),那么我没有这个问题。

据我所知,文档中没有任何内容表明这对于iOS 7而言应该与5或6不同。也许这是一个iOS错误?任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:1)

viewwillAppear

中设置此项
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
        self.tableView.separatorColor = [UIColor whiteColor];
    }

希望这会有所帮助

答案 1 :(得分:1)

问题是iOS错误 - iOS7.0.4不再出现这个问题。我不确切知道它修复了哪个版本。所以没有必要在viewWillAppear中重新加载数据或设置separatorColor。在viewDidLoad中执行此操作就足够了。

答案 2 :(得分:1)

这个iOS错误仍然发生在iOS7.0.6中。我有一张黑色背景和白色分隔线的桌子。分隔线在UIPopover的第一个视图上以白色正确显示,但在同一个弹出窗口的第二个和后续显示中显示为黑色。

在tableview上使用reloadData没有帮助。

我能找到的唯一实用的解决方法是以下内容,这会导致重绘整个表:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [_tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];
}
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [_tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];
}

注释

1)如果仅使用viewWillAppear代码,则分隔线会在再次变为黑色之前正确显示。如果仅使用viewDidAppear代码,则在显示弹出框后,分隔线变为白色之前会有明显的延迟。使用BOTH为用户提供最直观的无缝结果。

2)如果你的表有多个部分,那么你应该确保重新加载所有部分,因为用户可能在隐藏弹出窗口之前滚动到另一部分。

PS - 经过进一步测试,我发现即使这个解决方案也不完美。重新显示后,如果滚动表格,最初屏幕外的分隔符将再次恢复为黑色。因此,只有当表格没有足够的行超出弹出框的大小时,它才能正常工作。

答案 3 :(得分:0)

两项建议:
1.根本不要使用UITableViewController。它提供的自动行为可以通过几次调用轻松实现,也可以打破良好的OOP做法 2.关于分隔符,不显示分隔符,但在底部的每个单元格中添加UIView,宽度等于单元格宽度和高度为1磅。