分组的UITableView在底部有20px的额外填充

分组表视图似乎在iOS 6底部有额外的填充(iOS 5没有它),但我找不到任何文档表明这是正确的/预期的行为。

这也会影响示例项目,例如TableViewSuite示例中的SimpleTableView项目。 我想我不得不改变AppDelegate的风格到“分组”,并将SDK更新到iOS 6,但是没有对该项目进行其他更改。

调查显示,有10px保留为页眉和页脚的意见,加上一些20px是不能解释的。 没有实际的页眉或页脚视图( tableHeaderViewtableFooterViewnil ,实现和返回nil例如viewForFooterInSection什么都不做)。 我无法在tableView上find任何“20”值,尽pipe我可能错过了某些东西。

为页脚添加一个零大小的视图什么都不做,但是添加一个1px正方形视图会导致额外的填充消失。 例如:

 tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0,0,1,1)]; 

它仍然需要1px的高度,所以底部填充现在是11px ,但是这比20更不明显。现在将11px设置为0将导致只有1px的底部空间。

我的问题是:什么? 我怎么能彻底删除它? 这不是什么关键任务,但它是非常奇怪的,不可取的,据我可以告诉它是无证的。

请注意 – 从苹果dev论坛复制过去的问题。 但我有完全相同的问题,我不知道如何解决它。

@frankWhite'的解决scheme效果很好,但是这里更好的避免input0.1或0.001或其他小浮点数。

 // Swift version func tableView(tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { // remove bottom extra 20px space. return CGFloat.min } 
 // Objective-C version - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { // remove bottom extra 20px space. return CGFLOAT_MIN; } 

您可以使用contentInset来补偿20px额外的底部边距:

 tableView.contentInset = UIEdgeInsetsMake(0, 0, -20, 0); 
 -(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { return 0.01; } 

这对我有用

在Swift 3

 override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { return CGFloat.leastNormalMagnitude } 

这是我猜测唯一的工作解决scheme。我尝试设置tableFooterViewtableHeaderView nil 。 但是什么都没有发生。然后下面的解决scheme工作。 返回0;返回0 没有任何效果。我们应该返回尽可能低的高度。

  - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return CGFLOAT_MIN; } - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { return CGFLOAT_MIN; } 

注:这是我打印的值时得到的。

CGFLOAT_MAX = 340282346638528859811704183484516925440.000000

CGFLOAT_MIN = 0.000000

以下代码适用于我

 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 0; } - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { return 0; } 

Swift 3代码

 class PaddingLessTableView : UITableView { override func layoutSubviews() { self.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0) super.layoutSubviews() } } 

解决了这个问题: Obj-c – (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {return 0.1; }

Swift:重写func tableView(_ tableView:UITableView,heightForFooterInSection部分:Int) – > CGFloat {return 0.1}

使用UIScrollViewbounces属性:

 [yourTableView setBounces:NO]; 

这将删除你的UITableView的顶部和底部的额外填充。 实际上,它只是禁用tableview的滚动视图滚动内容的边缘。