视图头部的框架大小总是相同的。

18
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{

 if(section != 0) {

  UIView *view = [[[UIView alloc] initWithFrame:CGRectMake(10, 10, 100, 30)] autorelease];
  view.backgroundColor = [UIColor redColor];

  return view;

 } else {
  return tableView.tableHeaderView;
 }

}

这是我的viewForHeaderInSection实现,但无论我设置什么样的frame,它始终显示相同的红色边框。你看到我的代码有什么问题吗?

图片:

enter image description here

更新:

嗯,现在我的红色块更高了,但我的第一个tableHeader现在不知何故被隐藏了。第一个是用titleForHeaderInSection实现的。我以为只需要实现tableHeader的高度即可,但那行不通。

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
if(section == 1)
    return 30;
else
    return tableView.tableHeaderView.frame.size.height;
}
1个回答

43

您需要实现此委托方法。

    - (CGFloat)tableView:(UITableView *)tableView
heightForHeaderInSection:(NSInteger)section;

在你的情况下,你可以简单地return 30;


另外,你正在泄漏view

你的[view release]发生在return之后。但是一旦return发生,方法执行就会中止,你的release永远不会被调用。

所以你需要这样做:

UIView *view = [[[UIView alloc] initWithFrame:CGRectMake(10, 10, 100, 30)] autorelease];

同时去掉下面明确的 release


谢谢,你知道他们为什么不采用框架高度吗?我不明白为什么我必须在额外的委托方法中设置高度... - gabac
我不知道为什么苹果要这样做。有点傻。但我认为他们的意图是让表格视图的标题框始终跨越整个宽度。因此,唯一剩下要调整的大小变量是高度。 - Alex Wayne
谢谢你提供自动释放的提示。但是现在我又遇到了另一个问题,也许你可以再帮我一次吗? - gabac
这是一个不同的问题,有点不清楚。请发布一个新问题,只包含相关代码和一个新的图像来展示问题。 - Alex Wayne
非常感谢。已经完成了:http://stackoverflow.com/questions/2450957/height-of-tableheaderview-seems-to-be-0 - gabac

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