如果UITableViewCells为空,则隐藏删除分隔线

时间:2013-01-22 14:24:02

标签: ios uitableview cocoa-touch

我有一个UITableView,我只有3行,我可以看到这3行。问题是空单元格:我可以在那里看到线条。我不想看到这些界限。

知道如何删除这些行吗?

以下是我正在寻找的图片。

Image Link

16 个答案:

答案 0 :(得分:146)

比Andrey Z的回复更简单: 只需在UITableView类中创建一个伪表tableFooterView:

self.tableFooterView = [UIView new]; // to hide empty cells

和斯威夫特:

tableFooterView = UIView()

答案 1 :(得分:88)

您可以使用以下任意一段代码隐藏UITableView的标准分隔线。 添加自定义分隔符的最简单方法是添加1px高度的简单UIView

UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 1)];
separatorLineView.backgroundColor = [UIColor clearColor]; // set color as you want.
[cell.contentView addSubview:separatorLineView];

    self.tblView=[[UITableView alloc] initWithFrame:CGRectMake(0,0,320,370) style:UITableViewStylePlain];
    self.tblView.delegate=self;
    self.tblView.dataSource=self;
    [self.view addSubview:self.tblView];

    UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 10)];
    v.backgroundColor = [UIColor clearColor];
    [self.tblView setTableHeaderView:v];
    [self.tblView setTableFooterView:v];
    [v release];

- (float)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    // This will create a "invisible" footer
    return 0.01f;
}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    // To "clear" the footer view
    return [[UIView new] autorelease];
}

还要检查nickfalk's answer,它也非常简短且有用。 你也应该尝试这一行,

self.tableView.tableFooterView = [[UIView alloc] init];

不确定,但是我在iOS 5及更高版本中检查过的所有iOS版本都适用于iOS 7。

答案 2 :(得分:7)

透明UIView作为高度为1px的tableView页脚可以解决问题。

UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 1)];
v.backgroundColor = [UIColor clearColor];
[self.tableView setTableFooterView:v];

答案 3 :(得分:7)

更新了swift& amp;的答案iOS 9.这适用于.Plain种类的表视图。

 tableView.tableFooterView = UIView()

答案 4 :(得分:6)

self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

答案 5 :(得分:3)

使用此代码删除空单元格的分隔线。

 - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
// This will create a "invisible" footer
return 0.01f;
}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
     return [UIView new];

    // If you are not using ARC:
    // return [[UIView new] autorelease];
}   

答案 6 :(得分:2)

请尝试以下代码:

self.tblView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
if ([self.tblView respondsToSelector:@selector(setSeparatorInset:)])
{
    [self.tblView setSeparatorInset:UIEdgeInsetsZero];
}
// write in view did load

答案 7 :(得分:2)

只需在UIView()中返回一个空的viewForFooterInSection为我工作:

override func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
        return UIView()
    }

答案 8 :(得分:1)

您可以使用

tableForBrands.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

它对我有用......

答案 9 :(得分:0)

没有一个建议的答案适合我的类似问题。在tableView委托中实现此方法终于工作了:

- (void)tableView:(UITableView *)tableView
  willDisplayCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath
{
    tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
}

答案 10 :(得分:0)

如果您使用的是Storyboard,只需将UIView拖放到单元格下方的UITableView中,并将其高度设置为0.(仅在iOS 8项目中测试过)

答案 11 :(得分:0)

我想这就是你要找的东西。

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
    return 1.0f;
}

答案 12 :(得分:0)

您可以将表视图设置为分组而不是简单 - 这会稍微改变外观,但至少会删除额外的行。

我遇到了这个问题,最后改为分组视图。看起来好多了。

答案 13 :(得分:0)

之前的一些建议包含一个大概念错误:

如果你这样做:

[cell addSubview:....

即使单元格被“重用”,您也会为分隔符添加一个新的子视图!

以两种方式避免它:

a)使用TAG,并且:    1)要求该标签的子视图       让divider = cell.viewWithTag(TAG)......    2)如果存在,请勿添加其他子视图    3)如果不存在则添加AND标记。

b)创建自定义视图并在自定义单元格的“init”“awakeFromNib”中添加自定义分隔符。

代码a):

 if let divider = cell.viewWithTag(DIVIDER_TAG) as? UIView{
            // nothing.. eventually change color bases in IndexPath...
        }else{
            let frame = CGRectMake(0, cell.frame.height-1, cell.frame.width, 1)
            divider.tag = DIVIDER_TAG
            divider.backgroundColor = UIColor.redColor()
            cell.addSubview(divider)
        }

答案 14 :(得分:0)

在cellForRowAtIndexPath中

let separatorLineView:UIView = UIView(frame: CGRectMake(0,0,self.tableview.bounds.width,0.5))
separatorLineView.backgroundColor = tableView.separatorColor
cell!.contentView.addSubview(separatorLineView)

答案 15 :(得分:0)

Swift解决方案: tableView.tableFooterView = UIView(frame:CGRectZero)

使用Xcode 7.2