viewForHeaderInSection 的框架大小始终相同

Frame of viewForHeaderInSection is always the same size

提问人:gabac 提问时间:3/16/2010 最后编辑:Gurugabac 更新时间:4/18/2013 访问量:21133

问:

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

图像:

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;
}
iPhone UITableView 分组表

评论


答:

43赞 Alex Wayne 3/16/2010 #1

您需要实现此委托方法

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

就您而言,您可以简单地.return 30;


另外,你正在泄露视图

您发生在 .但是一旦发生这种情况,方法执行就会中止,并且永远不会调用 ur。[view release]returnreturnrelease

所以你想要这个

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

并摆脱下面的明确内容。release

评论

0赞 gabac 3/16/2010
谢谢,你知道他们为什么不拿 rame 高度吗?不明白为什么我必须在额外的委托方法中设置高度......
0赞 Alex Wayne 3/16/2010
我不知道苹果为什么这样做。这有点傻。但我认为他们希望标题框架始终跨越表视图的整个宽度。因此,唯一需要处理的尺寸变量是高度。
0赞 gabac 3/16/2010
谢谢关于自动释放的提示。但是现在我又遇到了一个问题,也许你可以再帮我一次?
0赞 Alex Wayne 3/16/2010
这是一个不同的问题,有点不清楚。发布一个新问题,其中只有相关代码和显示问题的新图像。
0赞 gabac 3/16/2010
非常感谢。做到了:stackoverflow.com/questions/2450957/......