为啥tableView不允许滚动查看footerView?

Posted

技术标签:

【中文标题】为啥tableView不允许滚动查看footerView?【英文标题】:Why tableView is not allowing to scroll to see the footerView?为什么tableView不允许滚动查看footerView? 【发布时间】:2013-07-25 06:42:01 【问题描述】:

我已经通过属性为 tableView 设置了一个自定义页脚:

self.tableView.tableFooterView = [self myCustomFooterView];

tableView 几乎填满了屏幕的全高,因此底部只有 1/3 的页脚可见。我已禁用弹跳,并且无法将 tableView 滚动到底部以查看 footerView。如果启用了弹跳,那么我可以弹跳并查看表格页脚,但表格在弹跳后会返回到相同的位置。看起来 tableView 内容大小不包括我的 footerView,这就是我无法滚动的原因。任何想法如何解决这个问题?

【问题讨论】:

在将其设置为表格页脚之前,您是否设置了页脚视图的框架(尤其是高度)?还可以尝试在viewWillAppear 中设置页脚,看看会发生什么 是的,我已将其框架设置为包含两个操作按钮。通过 NSLog 检查了它的框架,并添加了红色背景颜色以查看框架大小。 检查表格视图的框架,确保它不大于屏幕。 @JoshHinman Nop,它更小 (412) @JoshHinman 你是对的。我通过将 MyViewController.view 添加到 AnotherViewController.view 作为子视图来重用 MyViewController 中包含 tableView 的 AnotherViewController。因为 AnotherViewController.view 包含一些 logo 图像,所以 MyViewController.view.tableView 被推到底部。正如您指出的那样,问题是我将 tableView 推得太多了。谢谢。您可以将其发布为答案,我会接受。 【参考方案1】:

JoshHinman 是对的(“检查表格视图的框架并确保它不大于屏幕。”)。我通过将 MyViewController.view 添加到 AnotherViewController.view 作为子视图来重用 MyViewController 中包含 tableView 的 AnotherViewController。因为 AnotherViewController.view 包含一些 logo 图像,所以 MyViewController.view.tableView 被推到底部。正如他指出的那样,问题是我把 tableView 推得太多了:)

【讨论】:

【参考方案2】:

在你设置UITableView页脚之后,还要编写以下代码:

CGSize wholesize =  self.tableView.contentSize;    
wholesize.height = self.tableView.contentSize.height + self.tableView.tableFooterView.frame.size.height;  

self.tableView.contentSize = wholesize;
[tableView setContentOffset:CGPointMake(0, tableView.contentSize.height) animated:YES];
self.tableView.tableFooterView.userInteractionEnabled = YES;

【讨论】:

【参考方案3】:

您必须将此数据源方法的页脚设置为

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

还要确保tableview的框架可以满足页脚在视图中可见

编辑此方法有助于为每个部分设置页脚,因此如果您想在检查方法中返回的部分后将页脚设置为最后一个部分。

以及提问者的意图,这对我有用

UIView *view1 = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 40)];
[view1 setBackgroundColor:[UIColor redColor]];

[self.view addSubview:view1];
[self.table setTableFooterView:view1];

然后检查[self myCustomFooterView];

【讨论】:

添加页脚有两种方式。您建议的方式允许为每个部分添加页脚。可以将它添加到最后一部分,但需要进行一些检查。另一种更简洁的方法是通过设置 tableFooterView 属性为整个表格添加页脚。 不过,我更喜欢使用 tableFooterView 属性来设置 footerView。

以上是关于为啥tableView不允许滚动查看footerView?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 tableView 不向下滚动就不会更新?

为啥当我向下滚动iOS(tableView内的collectionview)时取消选择单元格?

为啥在我滚动显示来自 plist 的数据的 tableview 后我的应用程序崩溃?

我的 UITableView 不会向下滚动到数据的末尾!为啥?

Select2 不允许我滚动查看其余选项

为啥只有 ListView.builder() 中的内容不滚动?