【问题标题】:How to limit the number of cells UITableview displays?如何限制 UITableview 显示的单元格数量?
【发布时间】:2011-05-24 09:28:53
【问题描述】:

我正在使用表格视图在我正在开发的测验应用程序中显示一些信息。我的问题是如何让表格视图只显示我需要的单元格数量。我已经像这样设置了行数委托方法:

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

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

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

【问题讨论】:

  • 不清楚是要避免使用分组样式还是使用有问题?
  • 我在标准 UITableView 上实现任何分组都没有任何问题。我想说如果我使用分组并将每部分的行数设置为 5,当我运行应用程序时,我看到 5 行,仅此而已,只有 5 行。另一方面,如果我使用标准表格视图并将行数设置为 5 行,我看到我得到了 5 行,但在它们下面是额外数量的空行,它们没有内容并且不需要但放在那里只是为了填满屏幕。

标签: iphone uitableview


【解决方案1】:

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

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

迅速:

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

【讨论】:

  • 不错的一个。只要确保没有为该表格视图设置固定高度,否则额外的页脚视图可能会将内容推到表格视图下方(即使它只是一个虚拟的)。
  • 在 Swift 3 中:self.tableView.tableFooterView = UIView(frame: CGRect.zero)
【解决方案2】:

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

【讨论】:

  • 那么这将涉及在 IB 中创建一个自定义单元格,还是我必须以编程方式将分隔符添加到单元格中?
  • 你也可以。我通常将 UITableViewCell 子类化,但您可以将子视图添加到普通 UITableViewCell 的内容视图中。 IB 或代码完全取决于您喜欢的工作方式......
【解决方案3】:

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

我做了以下事情:

  1. 禁用整个 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 像素,与默认分隔符相同,它在底部的单元格的长度上运行。

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

希望这会有所帮助。

【讨论】:

    【解决方案4】:

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

    就我而言,我需要 9 行

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

        return [postListData count];
        

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

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

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

        没有这个,tableview 将只有 1 个部分。使用它,您可以想象到,您可以指定部分的数量。

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

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

            【讨论】:

              【解决方案9】:

              如果您想调整单元格的数量,我认为您可以尝试更改表格视图的框架。

              【讨论】:

                【解决方案10】:

                试试这样的:

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

                height指单元格的高度

                【讨论】:

                  【解决方案11】:

                  正如 Nyx0uf 所说,限制单元格的大小可以实现这一点。例如:

                  - (CGFloat)tableView:(UITableView *)tabelView heightForRowAtIndexPath:(NSIndexPath *)indexPath
                  {
                      CGFloat result;
                  
                      result = 100;
                  
                      return result;
                  }
                  

                  【讨论】:

                    【解决方案12】:

                    在你的 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你不用再为我渲染分隔线了,这样看起来空单元格就不会显示了(其实空单元格也不能被选中)

                    【讨论】:

                      猜你喜欢
                      • 2012-04-05
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2016-07-08
                      • 1970-01-01
                      相关资源
                      最近更新 更多