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の実装ですが、どのフレームを作成しても、常に同じ赤いフレームが表示されます。私のコードに問題がありますか?

画像:

ここに画像の説明を入力してください

アップデート:

Mhm今、私の赤いブロックは高くなっていますが、私の最初の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 に答える