85

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

知道如何删除这些行吗?

下面是我正在寻找的图像。

图片链接

4

16 回答 16

147

甚至比 Andrey Z 的回复更简单:只需在 UITableView 类中创建一个虚假的 tableFooterView:

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

和斯威夫特:

tableFooterView = UIView()

于 2013-01-22T14:35:32.420 回答
89

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

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 的答案,它也很短且很有帮助。你也应该试试这条线,

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

不确定,但它适用于我检查过的所有 iOS 版本,包括 iOS 5 及更高版本,直至 iOS 7。

于 2013-01-22T14:25:28.437 回答
8

更新了 swift 和 iOS 9 的答案。这适用于.Plain各种表格视图。

 tableView.tableFooterView = UIView()
于 2015-11-20T18:45:30.420 回答
7

透明UIViewtableView1px 高度的页脚就可以了。

UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 1)];
v.backgroundColor = [UIColor clearColor];
[self.tableView setTableFooterView:v];
于 2013-01-22T14:25:38.230 回答
6
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
于 2014-04-03T16:13:14.310 回答
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];
}   
于 2013-11-22T04:37:34.153 回答
3

只是返回一个空UIView()viewForFooterInSection为我工作:

override func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
        return UIView()
    }
于 2016-03-29T09:27:43.993 回答
2

请尝试以下代码:

self.tblView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
if ([self.tblView respondsToSelector:@selector(setSeparatorInset:)])
{
    [self.tblView setSeparatorInset:UIEdgeInsetsZero];
}
// write in view did load
于 2015-03-02T13:11:26.900 回答
1
tableForBrands.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
于 2013-11-26T10:09:30.843 回答
0

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

- (void)tableView:(UITableView *)tableView
  willDisplayCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath
{
    tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
}
于 2014-11-10T13:06:35.603 回答
0

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

于 2015-02-06T13:01:35.033 回答
0

我想这就是你要找的。

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
    return 1.0f;
}
于 2015-06-04T07:53:40.173 回答
0

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

我遇到了这个确切的问题,最终更改为分组视图。看起来好多了。

于 2015-07-22T11:57:23.600 回答
0

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

如果你这样做:

[单元格添加子视图:....

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

通过两种方式避免它:

a) 使用 TAG,并且: 1) 请求该标签的子视图 let divider = cell.viewWithTag(TAG) ... 2) 如果存在,不要添加另一个子视图 3) 如果不存在,添加并标记它。

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)
        }
于 2015-12-31T18:53:24.857 回答
0

在 cellForRowAtIndexPath 内部

let separatorLineView:UIView = UIView(frame: CGRectMake(0,0,self.tableview.bounds.width,0.5))
separatorLineView.backgroundColor = tableView.separatorColor
cell!.contentView.addSubview(separatorLineView)
于 2016-04-08T20:11:20.620 回答
0

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

在 Xcode 7.2 上工作

于 2016-05-11T01:07:49.107 回答