在iOS 6中,分组表视图似乎在底部有额外的填充(iOS 5没有它),但我找不到任何表明这是正确/预期行为的文档。
这也会影响示例项目,例如SimpleTableView
示例中的TableViewSuite
项目。我想我必须将AppDelegate
中的样式更改为'分组',并将SDK更新为iOS 6,但没有对该项目进行任何其他更改。
调查显示,有10px
保留了页眉和页脚视图,以及一些无法计算的20px
。
没有实际的页眉或页脚视图(tableHeaderView
和tableFooterView
为nil
,而实现和返回nil
例如viewForFooterInSection
则不做任何事情。
我在tableView上找不到任何'20'值,但我当然可能错过了一些东西。
为页脚添加零大小的视图不会做任何事情,但添加1px
方形视图会导致额外的填充消失。 e.g:
tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0,0,1,1)];
它仍然占据1px
的高度,因此底部填充现在为11px
,但这远不如20。现在将sectionFooterHeight
设置为0将导致仅在1px
的底部空间中。
我的问题是:什么?我怎样才能完全删除它?这不是任务关键任务,但它非常奇怪,不可取,而且据我所知,它没有记录。
请注意 - 从Apple开发论坛复制过去的问题。但我有完全相同的问题,我也不明白如何解决它。
答案 0 :(得分:66)
@ frankWhite'解决方案效果很好,但这里有一个更好的解决方案,可以避免输入0.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;
}
答案 1 :(得分:30)
您可以使用contentInset
来补偿20px额外的底部边距:
tableView.contentInset = UIEdgeInsetsMake(0, 0, -20, 0);
答案 2 :(得分:11)
在Swift 3中
override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return CGFloat.leastNormalMagnitude
}
答案 3 :(得分:10)
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return 0.01;
}
它为我工作
答案 4 :(得分:3)
这是我猜的唯一可行解决方案。我尝试将tableFooterView
和tableHeaderView
设置为nil
。
但事情没有发生。然后下面的解决方案有效。返回零"返回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
答案 5 :(得分:1)
最近,我发现了这个问题,并遵循了上面发布的解决方案,但是所有解决方案均无效。就我而言,我有一个具有动态高度的节标题。受以上解决方案的启发,我编写了以下代码,并解决了问题。希望对您有所帮助。
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
return UIView()
}
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 0.1
}
和配置tableView的页眉和页脚是这样的:
tableView.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: 1, height: 0.1))
tableView.tableFooterView = UIView(frame: CGRect(x: 0, y: 0, width: 1, height: 0.1))
答案 6 :(得分:0)
以下代码适用于我
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 0;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return 0;
}
答案 7 :(得分:0)
Swift 3代码
class PaddingLessTableView : UITableView
{
override func layoutSubviews() {
self.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
super.layoutSubviews()
}
}
答案 8 :(得分:0)
这解决了这个问题: 的的OBJ-C 强> - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { 返回0.1; }
<强>夫特:强> override func tableView(_ tableView:UITableView,heightForFooterInSection section:Int) - &gt; CGFloat { 返回0.1 }
答案 9 :(得分:0)
在Swift 4.2中,您可以尝试将表格标题设置为最低标准幅度高度-
var frame = CGRect.zero
frame.size.height = .leastNormalMagnitude
tableView.tableHeaderView = UIView(frame: frame)
答案 10 :(得分:0)
快速5
tableView.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: .leastNormalMagnitude))
答案 11 :(得分:-1)
使用bounces
的{{1}}属性:
UIScrollView
这会删除[yourTableView setBounces:NO];
顶部和底部的额外填充内容。
实际上,它只会禁用tableview的scrollview滚动浏览内容的边缘。