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 的实现,但无论我制作什么框架,它总是向我显示相同的红色框架。你看到我的代码有什么问题吗?

图片:

在此处输入图像描述

更新:

嗯,现在我的红色块更高了,但我的第一个 tableHeader 现在不知何故被隐藏了。第一个是用 titleForHeaderInSection 实现的。我以为我只是实现了 tableHeader 高度的高度,但这不起作用

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

1 回答 1

42

你需要实现这个委托方法

    - (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下面的显式。

于 2010-03-15T20:10:31.403 回答