我的应用程序使用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错误?任何帮助将不胜感激。
答案 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磅。