【问题标题】:UITableView showing more rows than specified in numberOfRowsInSection:UITableView 显示的行数超过 numberOfRowsInSection 中指定的行数:
【发布时间】:2012-06-02 01:09:39
【问题描述】:

我希望我的 tableView 显示包含文本的 6 行,在本例中为“示例”。据我所知,我的numberOfSectionsInTableView:numberOfRowsInSection: 设置正确。请参阅下面的示例代码:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
   // Return the number of sections.
   return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
  // Return the number of rows in the section.
  return 6;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{

  static NSString *CellIdentifier = @"Cell";

  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
  }

  cell.textLabel.text = @"Example";

  return cell;
}

问题在于,当您看到下图显示了不应该/不存在的行的行时。

如何去掉显示超过第 6 行的行?

【问题讨论】:

  • 这是所有普通表格视图的默认行为,其行数少于滚动所需的行数,因此仅设置行数和节数无济于事。你需要找到另一种方式......

标签: iphone objective-c ios uitableview


【解决方案1】:

你可以按照以下方式做一些事情:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:7 inSection:0];
[self.mytableView cellForRowAtIndexPath:indexPath].hidden = YES;

我确信有一些更好的方法,但这是我想到的第一件事。

【讨论】:

  • 如果这是一个愚蠢的问题,请原谅我,但你建议我把这段代码放在哪里? (里面是什么方法?)
【解决方案2】:

如果您指的是显示在最后一行下方的浅灰色线条,那只是 UITableView 绘制行分隔符的默认方式。

您可以尝试更改 Interface Builder 中的 Separator 样式(请参见下图),看看其中一种是否更符合您的喜好。

【讨论】:

  • 感谢您的建议,但我希望将分隔符用于确实存在的行,但其余行均未显示。
【解决方案3】:

generally accepted way 这样做是添加一个帧大小为 CGRectZero 的页脚视图,如下所示:

[tableView setTableFooterView:[[UIView alloc] initWithFrame:CGRectZero]]

这样做是告诉表格有一个页脚,因此它停止显示分隔线。然而,由于页脚有一个 CGRectZero 作为它的框架,所以没有显示任何内容,因此视觉效果是分隔符停止了。

【讨论】:

  • 如何去除多余的单元格?我不想展示它们 - 我宁愿展示部分标题中显示的灰色背景。
【解决方案4】:

你没有说你想在最后一行看到什么。如果您只想查看窗口背景,只需将表格视图嵌入到 UIView 中,该 UIView 的高度足以显示您想要查看的行数。如果您想在不滚动的情况下查看更多行,则必须根据行数调整包含视图的大小。

【讨论】:

    【解决方案5】:

    这是因为您的表格视图高度。你有天气写

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    

    // 返回节中的行数。 返回 6; }

    但它根据表格视图大小显示行。如果您不想显示这些额外的行,则将 UITableView 样式设置为普通分组。

    【讨论】:

    • -1 表示 UITableViewStyleGrouped。这会影响表格的整个显示,而不是提问者的要求。删除分隔符是更改样式的副作用。如果在以后的版本中更改了分组样式以包含其他分隔符,则此样式更改没有实际意义。
    • 不错的一个。不错,简单,快速修复!
    【解决方案6】:

    要以编程方式删除它,请使用以下命令: [yourTableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];

    【讨论】:

    • 这将删除所有单元格之间的分隔线
    【解决方案7】:

    简短的回答..

    self.tableView.tableFooterView = [UIView new];
    

    【讨论】:

      【解决方案8】:

      斯威夫特版本

      最简单的方法是设置 tableFooterView 属性:

      override func viewDidLoad() {
          super.viewDidLoad()
          // This will remove extra separators from tableview
          self.tableView.tableFooterView = UIView(frame: CGRect.zero)
      }
      

      【讨论】:

      • 斯威夫特 3:= UIView(frame: CGRect.zero)
      【解决方案9】:

      这要容易得多:

      1. 返回 numberOfSections + 1
      2. 在最后一节中返回 0 行

      这让事情变得简单!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-04
        相关资源
        最近更新 更多