如何限制UITableview显示的单元格数量?

时间:2011-05-24 09:28:54

标签: iphone uitableview

我正在使用tableview在我正在处理的测验应用中显示一些信息。我的问题是如何让tableview只显示我需要的单元格数量。我已经设置了委托方法的行数,如下所示:

-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
   return 5;
}

但是在表格视图的底部是不需要的空单元格。如果我将tableview样式设置为分组,我会得到5个单元格,而下面没有空单元格。我见过其他人已经这样做但似乎无法解决这个问题。我想知道他们是否以某种方式向表格页脚添加了一个自定义视图以取消空单元格?

任何想法或帮助表示赞赏。

12 个答案:

答案 0 :(得分:15)

如果您确实想要保留分隔符,则可以插入虚拟页脚视图。这将限制tableview只显示你在tableView中返回的单元格数量:numberOfRowsInSection:

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

在swift:

self.tableView.tableFooterView = UIView(frame: CGRectZero)

答案 1 :(得分:2)

一个不需要单元格大小调整的更好的方法是关闭默认分隔符(将样式设置为无),然后在单元格本身中有一个分隔线。

答案 2 :(得分:2)

我遇到了类似的问题,如何只显示包含数据的单元格的分隔符。

我做的是以下内容:

  1. 禁用整个tableView的分隔符。你可以做到这一点 “接口”构建器中的tableview检查器或通过调用 [yourTableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];

  2. 在您使用单元格填充表格视图的cellForRowAtIndexPath内创建一个新的UIView并将其设置为单元格的子视图。这个视图的背景是浅灰色和略透明的。您可以使用以下内容执行此操作:

    UIView *separatorView = [[UIView alloc] initWithFrame:CGRectMake:
                                            (0, cell.frame.size.height-1, 
                                               cell.frame.size.width, 1)];
    [separatorView setBackgroundColor:[UIColor lightGrayColor]];
    [separatorView setAlpha:0.8f];
    [cell addSubView:separatorView];
    

    此视图的宽度为1像素,与默认分隔符相同,它在底部运行单元格的长度。

  3. 由于cellForRowAtIndexPath仅按照您在numberOfRowsInSection中指定的频率调用,因此这些子视图只会为拥有数据且应具有分隔符的单元格创建。

    希望这有帮助。

答案 3 :(得分:1)

您可以实现 heightForRowAtIndexPath:并计算正确的高度,以便仅在屏幕上显示5个单元格。

答案 4 :(得分:1)

你总是会有5行吗?如果是动态情况,则应根据tableview的数据源设置行数。例如:

return [postListData count];

这将返回包含内容的数组中的记录计数。

tableview仅显示您告诉它的行数和部分数。如果你总是只有一个部分,请不要实现下面的方法。

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 2;
}

如果没有这个,tableview将只有1个部分。有了它,正如您想象的那样,您可以指定部分的数量。

答案 5 :(得分:1)

这对我有用 - 我在iPhone 5的屏幕底部有额外的空行 -

在我的情况下,我需要9行

- (CGFloat)tableView:(UITableView *)tabelView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{        
    return self.tableView.frame.size.height / 9;
}

答案 6 :(得分:1)

很简单。只需像这样设置popover的大小: self.optionPickerPopOver.popoverContentSize = CGSizeMake(200,200); 当然,您可以根据内容的大小和行数来调整大小(200,200)。

答案 7 :(得分:0)

简单的方法是缩小tableView大小。即每个5个单元20个点给出100.0f,设置高度为100.0f将导致只有5行可见。另一种方法是返回更多的行,但是行6,7会是一些带有alpha 0的视图,但这看起来很麻烦。您是否尝试将某些clerColor视图作为footerView返回?

答案 8 :(得分:0)

我想你可以尝试改变表格视图的框架,如果你想用细胞数量来调整。

答案 9 :(得分:0)

尝试这样的事情:

[table setFrame:CGRectMake(x, y, width, height*[list count])];

高度是指细胞的高度

答案 10 :(得分:0)

正如Nyx0uf所说,限制细胞的大小可以实现这一目标。例如:

- (CGFloat)tableView:(UITableView *)tabelView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CGFloat result;

    result = 100;

    return result;
}

答案 11 :(得分:0)

在UITableViewController中实现这两个方法:

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    if (section == tableView.numberOfSections - 1) {
        return [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];
    }
    return nil;
}


- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    if (section == tableView.numberOfSections - 1) {
        return 1;
    }
    return 0;
}

事实上,这些代码告诉tableview您不再需要为我渲染分隔线,因此它看起来不会显示空单元格(实际上,也不能选择空单元格) )