如何删除UITableView中的空单元格?

我试图显示一个简单的UITableView与一些数据。我希望设置UITableView的静态高度,以便它不会在表的末尾显示空单元格。我怎么做呢?

代码:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSLog(@"%d", [arr count]);
return [arr count];
}
157107 次浏览

设置一个零高度的表脚视图(可能在你的viewDidLoad方法中),如下所示:

迅速:

tableView.tableFooterView = UIView()

objective - c:

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

因为表格认为有一个页脚要显示,所以除了显式要求的单元格之外,它不显示任何单元格。

接口构建器的专业技巧:

如果你正在使用xib /板,你可以将一个UIView(高度为0pt)拖到UITableView的底部。

我现在不能添加评论,所以添加这个作为答案。

@Andy的回答很好,下面这行代码也能达到同样的效果:

tableView.tableFooterView = [UIView new];

'new'方法属于NSObject类,为UIView调用allocinit方法。

在故事板中,选择UITableView,并将属性Style从Plain修改为Grouped

在Xcode 6.1上用swift实现

self.tableView.tableFooterView = UIView(frame: CGRectZero)
self.tableView.tableFooterView?.hidden = true

第二行代码不会对表示造成任何影响,您可以使用它来检查是否隐藏。

从这个链接得到的答案 未能在UITableView Swift中隐藏空单元格 < / p >

我试了一下代码:

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

viewDidLoad部分,xcode6显示了一个警告。我在它前面放了一个“self.”,现在它可以正常工作了。所以我使用的工作代码是:

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

Swift 3语法:

tableView.tableFooterView = UIView(frame: .zero)

Swift语法:<2.0

tableView.tableFooterView = UIView(frame: CGRect.zeroRect)

Swift 2.0语法:

tableView.tableFooterView = UIView(frame: CGRect.zero)
override func viewWillAppear(animated: Bool) {
self.tableView.tableFooterView = UIView(frame: CGRect.zeroRect)


/// OR


self.tableView.tableFooterView = UIView()
}

使用UITableViewController

所接受的解决方案将改变TableViewCell的高度。要解决这个问题,请执行以下步骤:

  1. ViewDidLoad方法中编写下面给出的代码片段。

    tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; < / p >

  2. TableViewClass.m文件中添加以下方法。

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    return (cell height set on storyboard);
    }
    

That's it. You can build and run your project.

以下方法:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (([array count]*65) > [UIScreen mainScreen].bounds.size.height - 66)
{
Table.frame = CGRectMake(0, 66, self.view.frame.size.width, [array count]*65));
}
else
{
Table.frame = CGRectMake(0, 66, self.view.frame.size.width, [UIScreen mainScreen].bounds.size.height - 66);
}
return [array count];
}

这里65是单元格的高度66是UIViewController中导航栏的高度。

或者你可以调用tableView方法来设置页脚高度为1点,它会添加最后一行,但你也可以隐藏它,通过设置页脚背景颜色。

代码:

func tableView(tableView: UITableView,heightForFooterInSection section: Int) -> CGFloat {
return 1
}

看起来像最后一行