UITableView:显示最后一个单元格的分隔符的正确方法

dar*_*iaa 31 objective-c uitableview ios ios7

问题是在表/节的最后一个单元格中显示分隔符的最正确方法是什么.

基本上这就是我所追求的.

在此输入图像描述 这是来自原生音乐应用程序,这让我觉得应该可以通过它实现UITableView,他们不会使用一些私有API用于细胞分离器,对吧?

我知道你可以在不使用实际分隔符的情况下逃脱,但在单元格底部添加一条像素线.但我不是这种方法的粉丝,因为

  1. 当选择/突出显示一个单元格时,它的分隔符前一个单元格的分隔符会自动隐藏(请参阅第二个屏幕截图,选中"你必须疯狂").这是我想要UITableView处理的东西而不是自己如果我使用一个像素的线(当细胞分离器不一直延伸到表视图的边缘,分隔符和选定的单元格背景不看时,这是特别方便很好).
  2. 我想保持我的细胞尽可能平坦以进行滚动表现.

UITableView参考中还有一些东西让我觉得有一种简单的方法来获得我想要的东西:

在iOS 7及更高版本中,单元格分隔符不会一直延伸到表格视图的边缘.此属性设置表中所有单元格的默认插入,就像rowHeight设置单元格的默认高度一样.它还用于管理在普通样式表底部绘制的"额外"分隔符.

有人知道如何使用在普通样式表底部绘制的这些"额外"分隔符吗?因为这正是我所需要的.我认为分配separatorInsetUITableView,不会UITableViewCell做的伎俩,但事实并非如此,最后一个单元仍然缺少它的分隔符.

现在我只看到一个选项:有一个自定义的部分页脚来模仿最后一个单元格的分隔符.这并不好,特别是如果你想使用tableView:titleForFooterInSection:方法有一个实际的部分页脚.

Tim*_*giz 17

这对我来说是完美无缺的,可以在最后一个单元格中添加一个分隔符.玩得开心!

self.tableView.tableFooterView = [[UIView alloc] init];
Run Code Online (Sandbox Code Playgroud)


小智 12

将headerView或footerView添加到TableView时,最后一个分隔线将消失.

下面的示例将让您解决在最后一个单元格上显示分隔符的问题.你必须要实现更多的是在选择单元格后使这个分隔符消失,因此行为与其他单元格中的行为相同.

对于Swift 4.0

func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {

    let result = UIView()

    // recreate insets from existing ones in the table view
    let insets = tableView.separatorInset
    let width = tableView.bounds.width - insets.left - insets.right
    let sepFrame = CGRect(x: insets.left, y: -0.5, width: width, height: 0.5)

    // create layer with separator, setting color
    let sep = CALayer()
    sep.frame = sepFrame
    sep.backgroundColor = tableView.separatorColor?.cgColor
    result.layer.addSublayer(sep)

    return result
}
Run Code Online (Sandbox Code Playgroud)


Sim*_*Frr 8

我发现了一些适合我的东西.简而言之:给你的UITableView一个tableFooterView并将它的框架高度设置为0.这使得一个实际的分隔符显示,具有正确的插入.

更多细节:如果您正在使用故事板,请将UIView拖动到表视图的底部(在左侧的树视图中),以便它显示在同一层级的表视图单元格下方.这会创建一个tableFooterView.当然,这也可以通过编程方式完成.

然后,在您的UITableViewController的实现中:

UIView *footerView = self.tableView.tableFooterView;
CGRect footerFrame = footerView.frame;
footerFrame.size.height = 0;
[footerView setFrame:footerFrame];
Run Code Online (Sandbox Code Playgroud)

如果这对您有用,请告诉我!如果您使用tableHeaderView,它也可能适用于第一个分隔符,但我还没有尝试过.


Nii*_*tse 5

所以这是Swift 4 中的一个超级简单的解决方案,它有效:

在里面override func viewDidLoad(){},我简单地实现了这行代码:

    self.tableView.tableFooterView = UIView(frame: .zero)
Run Code Online (Sandbox Code Playgroud)

因此,它确保只有最后一个单元格获得分隔符插图。

这对我来说非常有效,希望它也适用于你!


Ila*_*rio 3

这将完全按照您想要的方式进行..即使该线将占据单元格的整个宽度:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
self.tableView.separatorColor = [UIColor redColor];
self.tableView.separatorInset = UIEdgeInsetsZero;
Run Code Online (Sandbox Code Playgroud)