3

使用原型单元格,我需要在表格视图底部添加页脚视图,以便用户在滚动到表格视图底部时可以看到此页脚视图。因此,创建了一个带有一个屏幕、表格视图和两个原型单元的演示项目。寻找一种如何使用 Interface Builder 将某些视图拖放到表格下方的方法。问题是视图看起来被放在表格视图内容之外,所以我看到了页脚,但我无法滚动到它(在表格视图的底部只能看到一小部分页脚视图)。

我知道这应该可行,因为已经看到了一个可行的实现,但无法弄清楚我需要添加什么魔法设​​置或代码行。

以下是方法:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

  return 1;
}

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

  return 2;
}

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

  CGFloat rowHeight = 10;

  switch (indexPath.row) {

    case 0: {

        rowHeight = 376;

        break;
    }
    case 1: {

        rowHeight = 105;

        break;
    }
  } 

  return rowHeight;
}

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

  switch (indexPath.row) {

    case 0: {

        Cell1 *cell1 = [tableView dequeueReusableCellWithIdentifier:@"Cell1" forIndexPath:indexPath];
        return cell1;

        break;
    }
    case 1: {

        Cell2 *cell2 = [tableView dequeueReusableCellWithIdentifier:@"Cell2" forIndexPath:indexPath];
        return cell2;

        break;
    }
  }

  return nil;
}

只需制作带有两个不同高度单元格的 2 行表。Cell1 和 Cell2 类是 UITableViewCell 的空子类。

以下是界面生成器中表格视图和单元格的外观:

在此处输入图像描述

这是启动后的初始视图:

在此处输入图像描述

这是我滚动到底部时看到的内容:

在此处输入图像描述

页脚在那里,但在表格视图之外(滚动内容)。如您所见,默认情况下,表格视图在底部为页脚保留了一些 44 像素的空间。但是,如果我在 tableView:heightForFooterInSection: 中设置页脚高度,则会出现空格。

此外,尝试将此视图拖动并向上移动到 IB 中的视图层次结构,因此该视图将成为标题视图。在这种情况下,视图在顶部显示为标题视图,但是当滚动到底部时,第二个单元格仅部分显示。看起来表格计算了显示原型动态单元格所需的空间(为表格视图设置了“动态原型”)。如果您向界面构建器添加额外的页脚或页眉视图,那么单元格的空间就会减少(如果将视图添加为页眉)或页脚不会显示。

更新。如果我添加此方法,则会出现空格:

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {

  return 50;
}

这是我在这种情况下得到的(cell2下方的空格):

在此处输入图像描述

如果我禁用自动布局, UPDATE2页脚将正确显示。

4

2 回答 2

2

我认为您错过了以下行

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{

    return HEIGHT_OF_YOUR_FOOTER_VIEW;

}

编辑

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{

    UIView *footer=[[UIView alloc] initWithFrame:CGRectMake(0,0,320.0,50.0)];
    footer.layer.backgroundColor = [UIColor orangeColor].CGColor;


    return footer;    
}

更新

检查此文档

于 2013-11-11T16:48:20.467 回答
1

终于找到了解决办法。注意到禁用自动布局时页脚正确显示,因此开始查看约束。因此,使用 Ctrl + Drag 为容器约束添加了前导空间、尾随空间、底部空间和顶部空间到表视图。然而,IB 显示了关于缺少 Y 位置约束的红色警告。因此,从 IB 建议面板中选择“添加缺少的约束”后,IB 添加了另一个系统约束,但页脚仍然无法正确显示。似乎 IB 无法为容器系统约束添加正确的顶部空间和底部空间,甚至无法修复该问题。因此,我有 5 个系统约束:

在此处输入图像描述

使用 Ctrl + 从表视图拖动到包含视图添加系统约束在以前的演示中对我有用。但是,这一次 IB 无法为容器添加正确的顶部空间和底部空间,因此顶部空间垂直约束的值为 -568。尝试设置为0,但没有奏效。尝试了十次删除所有约束并再次添加它们。同样的结果。

所以,我删除了所有这些垂直(底部和空间)约束,然后选择“添加缺失的约束”。还有宾果游戏!IB 添加了正确的垂直约束并且页脚视图正确显示。以下是正确约束的外观。但是,我仍然不明白为什么当我从表视图到容器视图执行 Ctrl + 拖动时,IB 无法添加正确的约束。

在此处输入图像描述

于 2013-11-12T12:00:55.650 回答