iOS7中分组UITableView的头部视图高度

18
我正在构建我的设置界面并使用分组表格视图。在尝试设置标题时,我看到我的标题视图上方有间隙。我仔细检查了-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section方法中传递的正确视图高度。
以下是此行为的屏幕截图: enter image description here 你可以看到我的带有标题(VIBRATE,SILENT MODE)并具有较暗背景色的视图以及它上方明亮的空间。

那么你的问题是什么?而且这仍然是NDA,你应该在开发者论坛中提问。 - Kevin
如何消除标题视图上方的空白。 - Gal
6个回答

73

经过长时间的搜索,我终于找到了解决方法。需要在tableview的代理中实现heightForFooterInSection方法,并返回一个非常小的数字。如果返回0,则默认使用导致额外间距的相同间距。

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

1
是的,行为相当不连贯。所有的值都返回正确的高度,但 0 返回默认高度。这没有得到记录,行为似乎不连贯。我已经为此打开了一个雷达。 - viggio24
@viggio24 谢谢你!请继续告诉我们进展情况。 - iGranDav
@naudec 谢谢您的建议。CGFLOAT_MIN可能是更好的返回值。我已经更新了我的答案。 - Casey
谢谢,这对我有用。返回0不会停止UITableView的默认行为,它会渲染页脚。 - Bùi Thanh Hải
对于任何尝试使用Swift的人, CGFLOAT_MIN不可用,编译器会友好地提示您使用CGFloat.min - apocolipse

5

试试这个:

- (void)viewWillAppear:(BOOL)animated{
    CGRect frame = self.tableView.tableHeaderView.frame;
    frame.size.height = 1;
    UIView *headerView = [[UIView alloc] initWithFrame:frame];
    [self.tableView setTableHeaderView:headerView];
}

谢谢回复。我认为这只会影响表格的顶部标题,而我说的是节的标题。 - Gal
这实际上是一个合法的解决方案-如果存在tableHeaderView,系统不会向第一节标题添加额外的空间。就个人而言,我更喜欢这个技巧,而不是去搞乱页脚高度。 - Joseph Lin

4
这基本上与Casey的回答相同,但是更为简洁,因为它不需要实现委托方法。当您设置表格视图时,只需将属性sectionFooterHeight设置为0即可。它可以用更少的代码(和没有奇怪的DBL_MIN)来完成相同的事情。 tableView.sectionFooterHeight = 0.0;

1

我相信这只是一个简单的黑客技巧。但是一个简单的方法是编写以下函数:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
      return 48.0f; // header height
}

要自定义其高度。

我相信还有其他我不知道的方法。


3
谢谢回答。我已经实现了这种方法。我返回了正确的标题视图高度,但仍然在上方得到额外的约20个像素的间距。 - Gal

0

Swift 2.2 版本:

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

0

似乎苹果有意决定在分组表视图顶部留有额外空间。尝试调整UITableViewcontentInset。请参见此处我的回答


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接