如何防止 UITableView 分隔符颜色在 UIPopoverController (iOS7) 中变黑?
Posted
技术标签:
【中文标题】如何防止 UITableView 分隔符颜色在 UIPopoverController (iOS7) 中变黑?【英文标题】:How do I prevent UITableView separator color from turning black in UIPopoverController (iOS7)? 【发布时间】:2013-09-30 16:13:37 【问题描述】:我的应用程序使用 UITableViewController,它是 UINavigationController 的子级,它是 UIPopoverController 的内容视图控制器。我正在自定义 UITableViewController 的 UITableView 的外观。它适用于 ios 5 和 6,但在 iOS7 中存在问题。单元格的分隔符设置为白色,表格视图最初以正确的分隔符颜色显示。但是,一旦我滚动表格视图并重新加载单元格(这意味着调用了 cellForRowAtIndexPath 和 willDisplayCell 函数),新重新加载的单元格的分隔符都是黑色的。
我通过在 UITableViewController 的 viewDidLoad 函数中调用这个函数来自定义分隔符颜色:
self.tableView.separatorColor = [UIColor whiteColor];
如果我在应用程序的其他地方(不是在 UIPopoverController 中)使用完全相同的表格视图,那么我没有这个问题。
据我所知,文档中没有任何内容表明 iOS 7 的工作方式与 5 或 6 的工作方式不同。也许这是一个 iOS 错误?任何帮助将不胜感激。
【问题讨论】:
您是打算移除表格分隔符还是您的表格很暗?顺便说一句,在 iOS7 中有很多这样的小故障。 表格视图单元格是彩色的,因此分隔符在白色时可见。所以我不希望它们被删除。 我在 iPad 上的弹出框内的表格视图中看到了类似的问题。原因似乎是由于在表格视图出现之前重新加载了它 - 如果我不这样做,而是在它被添加到屏幕后重新加载它,它会稍微好一点。 自从我遇到这个问题以来,我一直无法找到任何解决方案,而且它看起来确实像一个 iOS7 UIKit 错误。我已向 Apple 提交了该错误,但尚未收到任何回复。 有同样的问题。尝试在 ViewController 的 viewWillAppear 方法 () 中调用 setSeparatorColor(),而这里 setSeparatorColor() 在第二次和第 n 次调用时都没有效果。只有第一个。看起来确实是个bug。感谢您向 Apple 提交申请。 【参考方案1】:在viewwillAppear
中设置这个
- (void)viewWillAppear:(BOOL)animated
[super viewWillAppear:animated];
self.tableView.separatorColor = [UIColor whiteColor];
希望对你有帮助
【讨论】:
Vern Jensen 的评论中提到了确切的解决方案。似乎并不适合所有人。【参考方案2】:问题是 iOS 错误 - 对于 iOS7.0.4,我不再出现此问题。我不确切知道它是在哪个版本中修复的。因此无需在 viewWillAppear 中重新加载数据或设置 separatorColor。在 viewDidLoad 中执行此操作就足够了。
【讨论】:
【参考方案3】:这个 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 - 经过进一步测试,我发现即使是这个解决方案也不完美。重新显示后,如果滚动表格,最初在屏幕外的分隔符会再次恢复为黑色。因此,只有当表格没有足够的行超出弹出框的大小时,它才能正常工作。
【讨论】:
【参考方案4】:两个建议:
1. 完全不要使用UITableViewController
。它提供的自动化行为可以通过几次调用轻松实现,而且它打破了良好的OOP
实践。
2.关于分隔符,不显示分隔符,而是在每个单元格底部添加UIView
,宽度等于单元格的宽度和高度1个点。
【讨论】:
以上是关于如何防止 UITableView 分隔符颜色在 UIPopoverController (iOS7) 中变黑?的主要内容,如果未能解决你的问题,请参考以下文章
页脚视图的颜色总是比 UITableView 分隔符的颜色深