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

时间:2013-01-08 07:52:40

标签: objective-c ios uitableview

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

这也会影响示例项目,例如SimpleTableView示例中的TableViewSuite项目。我想我必须将AppDelegate中的样式更改为'分组',并将SDK更新为iOS 6,但没有对该项目进行任何其他更改。

调查显示,有10px保留了页眉和页脚视图,以及一些无法计算的20px。 没有实际的页眉或页脚视图(tableHeaderViewtableFooterViewnil,而实现和返回nil例如viewForFooterInSection则不做任何事情。 我在tableView上找不到任何'20'值,但我当然可能错过了一些东西。

为页脚添加零大小的视图不会做任何事情,但添加1px方形视图会导致额外的填充消失。 e.g:

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

它仍然占据1px的高度,因此底部填充现在为11px,但这远不如20。现在将sectionFooterHeight设置为0将导致仅在1px的底部空间中。

我的问题是:什么?我怎样才能完全删除它?这不是任务关键任务,但它非常奇怪,不可取,而且据我所知,它没有记录。

请注意 - 从Apple开发论坛复制过去的问题。但我有完全相同的问题,我也不明白如何解决它。

12 个答案:

答案 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)

这是我猜的唯一可行解决方案。我尝试将tableFooterViewtableHeaderView设置为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滚动浏览内容的边缘。