10

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

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

self.tableView.separatorColor = [UIColor whiteColor];

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

据我所知,文档中没有任何内容表明 iOS 7 与 5 或 6 的工作方式不同。也许这是一个 iOS 错误?任何帮助将非常感激。

4

4 回答 4

1

设置这个viewwillAppear

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

希望这可以帮助

于 2013-10-25T04:03:58.667 回答
1

这个问题是一个 iOS 错误 - 对于 iOS7.0.4,我不再出现这个问题。我不确切知道它是在哪个版本中修复的。因此无需在 viewWillAppear 中重新加载数据或设置 separatorColor。在 viewDidLoad 中执行此操作就足够了。

于 2014-02-12T17:41:07.790 回答
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 - 经过进一步测试,我发现即使这个解决方案也不完美。重新显示后,如果滚动表格,最初在屏幕外的分隔符会再次恢复为黑色。因此,只有当表没有足够的行超出弹出框的大小时,它才能正常工作。

于 2014-03-04T00:25:16.557 回答
0

两个建议:
1. 完全不要使用UITableViewController。它提供的自动化行为可以通过几个调用轻松实现,并且它打破了良好OOP实践。
2.关于分隔符,不显示分隔符,而是UIView在底部的每个单元格中添加一个,宽度等于单元格的宽度和高度1个点。

于 2014-02-11T08:46:10.287 回答