UITableView分组隐藏分区分隔符。

23

我知道这个问题以前已经被问过了。但是没有人在互联网上提供了一个有效的答案。

编辑 显然现在人们不再阅读Stack Overflow上的问题了。所以我想澄清一下:我想移除分隔线。该分隔线既不是位于部分上方的空格,也不是tableViewHeader或tableViewFooterView。它只是位于上方的细线(从左到右完全覆盖)。

我有一个分组的 UITableView(出于许多其他原因,我不想使用纯样式,就按照现状来)。该表视图有多个分组。

第一个部分不应该有顶部的分隔线。设置tableView的分隔符样式不可行,因为我需要其他分隔符。

设置tableView的 tableFooterView 是我经常看到的解决方法,但从未奏效。

之前我使用静态内容的tableView,并且我能够在 -[UITableViewController viewDidLoad] 中使用以下代码来删除分隔线:

- (void)viewDidLoad {
    [[[self headerTableCell] valueForKey:@"_topSeparatorView"] removeFromSuperView];
}

因为我现在必须将tableView更改为动态的,所以IBOutlet属性不再起作用(显然)。

所以我尝试了所有的方法,- [id tableView:willDisplayCell:atIndexPath:]- [UITableViewCell initWithStyle:reuseIdentifier:prepareForReuseawakeFromNib] 等等。

无论如何,这个分隔符为空。因此,我需要一个在单元格的完整视图层次结构设置完成时调用的方法。


1
一张截图可以帮你解决很多问题 ;) - Nicolas Miari
不可能的。 - Julian F. Weinert
我最终实现了基于自定义视图的单元格。 - Julian F. Weinert
谢谢您的回复。在我的情况下,我不得不同意保留它们 :( - iur
@JulianF.Weinert 这可以通过在子视图中查找子视图并删除该视图来实现。 - Imran Rasheed
显示剩余2条评论
4个回答

2
您的情况是您有一个分组的UITableView,您想要第一部分没有分隔符,并且您希望保留其他部分的分隔符。因此,请从“属性检查器”中删除整个tableview的分隔符,并为其他部分在storyboard中创建自定义UITableviewCell,并在其末尾添加高度为1、宽度为整个屏幕的视图(类似于默认分隔符)。这可能不是最好的主意,但这将使您可以没有分隔符地拥有第一部分。

1

在你的自定义单元格类中添加这个覆盖函数

   override func layoutSubviews() {
    super.layoutSubviews()
    for subview in subviews where (subview != contentView && abs(subview.frame.width - frame.width) <= 0.1 && subview.frame.height < 2) {
        subview.removeFromSuperview()
    }
 }

1
嗨Imran,感谢你的回答。已经过去6年了...我需要重新创建这个问题,但听起来是可行的解决方案。 - Julian F. Weinert
1
我唯一看到的问题是单元格重用。您删除了一个子视图,因此如果单元格在另一个部分中被重用,则该子视图将不再存在。我想我最终创建了一个完全定制的视图,但那时候情况有点不同;-) - Julian F. Weinert

0
也许这个问题和我以前遇到的一样。 最终,我解决这个问题的方法是:设置表视图delegate的方法(CGFloat)tableView:(UITableView *)tableView heightForHeaderAtSection:(NSInteger)section,然后return CGFLOAT_MIN;

0

我遇到了类似的问题,想要删除分组表视图中的最后一行。我在viewWillAppear和每次表格重新加载时调用以下方法。这不是确切的答案,但可以通过更改虚拟视图的y值来解决问题。

+(void)removeLastSectionSeparatorForTableView:(UITableView *)tableView
{
    UIView *oldSeparatorView = [tableView viewWithTag:kTagDummySectionSeparator];

    if (oldSeparatorView != nil)
    {
        [oldSeparatorView removeFromSuperview];
    }

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(),
                   ^{

                       UIView *view = [[UIView alloc] init];
                       view.tag = kTagDummySectionSeparator;
                       view.backgroundColor = [UIColor colorWithRed:239.0/255 green:239.0/255 blue:244.0/255 alpha:1.0];//Group table background color
                       view.frame = CGRectMake(0,
                                               tableView.contentSize.height-40,
                                               tableView.bounds.size.width,
                                               2);
                       [tableView addSubview:view];
                   });
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接