iOS 7 自定义分隔符不模仿默认分隔符行为。

Posted

技术标签:

【中文标题】iOS 7 自定义分隔符不模仿默认分隔符行为。【英文标题】:iOS 7 custom separator does not mimic default separator behavior. 【发布时间】:2014-02-18 20:06:05 【问题描述】:

我正在尝试在我的自定义 UITableViewCell 中绘制自定义分隔符。

CALayer *border = [CALayer layer];
border.frame = CGRectMake(0, 60, 320, 1.0f);
border.backgroundColor = [UIColor blackColor].CGColor;
[self.layer addSublayer:border];

我的自定义UITableViewCell 高度是60

由于某种原因,当我滚动到表格视图的底部时,所有分隔符都正常显示,但是当我向上滚动表格时,顶部的表格单元格不显示我的分隔符。

我可以使用y of 59 设置我的分隔符:

CALayer *border = [CALayer layer];
border.frame = CGRectMake(0, 59, 320, 1.0f);
border.backgroundColor = [UIColor blackColor].CGColor;
[self.layer addSublayer:border];

但是这种行为是不希望的,因为当我选择一行时,我希望前一个单元格上的分隔符消失,这仅在 y60 时发生,这是我的单元格的高度。

【问题讨论】:

【参考方案1】:

如果您的单元格高度为 60pts,则将 UIView 的 y 位置设置为 60pts 和 1pt 高度会将其绘制到单元格边界之外。

这最初可能会起作用,因为单元格添加到 tableView 的顺序。即顶部单元格是在第二个单元格向下添加之后添加的,因此 1pt 分隔符被绘制在第二个单元格的顶部......但是当你向上滚动,单元格以不同的顺序添加回 tableView,导致分隔符隐藏,因为它下方的单元格被绘制在顶部。

要解决这个问题,您必须在单元格边界内绘制分隔符。

我真的不明白为什么您希望前一个单元格上的分隔符(我假设您的意思是最后一个选定的单元格)消失,但是您可以通过在自定义 UITableViewCell 子类上覆盖 setHighlighted:animated:setSelected:animated: 来实现这一点吗?

【讨论】:

我不希望最后一个选定单元格的分隔符消失,我希望当前选定单元格分隔符正上方的单元格消失。它类似于默认分隔符,当您选择一个单元格时,您看不到它上面的单元格的分隔符。 嗯,在那种情况下.. 在 tableView 的顶部手动绘制分隔符怎么样?这只是一个想法.. 不确定它是否实用,但您可以更轻松地控制它们的外观等 这似乎很难处理,我在想可能有一个更简单的解决方案。

以上是关于iOS 7 自定义分隔符不模仿默认分隔符行为。的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 7 上的 UITableViewCell 之间绘制自定义分隔线

使用自定义的行分隔符,从StreamReader中读取一行字符串

iOS)如何添加uitableviewcell的默认分隔符

IOS Swift 5 为动态高度 TableView 单元添加自定义 TableViewCell 分隔符

如何在 5.7.0 版本的 D3.js 中制作自定义千位分隔符和小数字符

模仿 UITextView 的默认双击行为