分组的UITableView在底部有20px的额外填充
分组表视图似乎在iOS 6底部有额外的填充(iOS 5没有它),但我找不到任何文档表明这是正确的/预期的行为。
这也会影响示例项目,例如TableViewSuite
示例中的SimpleTableView
项目。 我想我不得不改变AppDelegate
的风格到“分组”,并将SDK更新到iOS 6,但是没有对该项目进行其他更改。
调查显示,有10px
保留为页眉和页脚的意见,加上一些20px
是不能解释的。 没有实际的页眉或页脚视图( tableHeaderView
和tableFooterView
是nil
,实现和返回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。我尝试设置tableFooterView
和tableHeaderView
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}
使用UIScrollView
的bounces
属性:
[yourTableView setBounces:NO];
这将删除你的UITableView
的顶部和底部的额外填充。 实际上,它只是禁用tableview的滚动视图滚动内容的边缘。