371

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

代码:

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

10 回答 10

923

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

迅速:

tableView.tableFooterView = UIView()

目标-C:

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

因为表格认为有一个页脚要显示,所以它不会显示超出您明确要求的任何单元格。

界面构建器专业提示:

如果您使用的是xib/Storyboard,您只需将 UIView(高度为 0pt)拖到 UITableView 的底部。

于 2013-01-25T11:11:06.677 回答
104

斯威夫特 3 语法:

tableView.tableFooterView = UIView(frame: .zero)

斯威夫特语法:< 2.0

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

斯威夫特 2.0 语法:

tableView.tableFooterView = UIView(frame: CGRect.zero)
于 2015-01-30T20:50:35.593 回答
66

在 Storyboard 中,选择UITableView,并将属性 Style 从 修改PlainGrouped

于 2014-04-18T10:17:39.893 回答
17

在 Xcode 6.1 上用 swift 实现

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

第二行代码对展示没有任何影响,可以用来检查是否隐藏。

来自此链接的答案 Fail to hide empty cells in UITableView Swift

于 2014-10-21T20:00:26.617 回答
11

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

@Andy 的回答很好,使用以下代码行可以实现相同的结果:

tableView.tableFooterView = [UIView new];

'new' 方法属于NSObject类,allocinitUIView.

于 2013-12-31T12:24:32.690 回答
8

我试过代码:

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

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

self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
于 2014-10-30T14:29:00.043 回答
3

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

代码:

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

看起来像最后一行

于 2016-02-29T10:05:56.877 回答
2
override func viewWillAppear(animated: Bool) {
    self.tableView.tableFooterView = UIView(frame: CGRect.zeroRect)

/// OR 

    self.tableView.tableFooterView = UIView()
}
于 2015-10-30T05:41:29.737 回答
1

使用UITableViewController

接受的解决方案将改变TableViewCell. 要解决此问题,请执行以下步骤:

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

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

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

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

而已。您可以构建和运行您的项目。

于 2015-12-08T12:59:58.873 回答
0

在以下方法中:

- (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 中导航栏的高度。

于 2016-01-08T06:59:34.677 回答