Рамка viewForHeaderInSection всегда одинакового размера - PullRequest
17 голосов
/ 15 марта 2010
- (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;
}

1 Ответ

40 голосов
/ 15 марта 2010

Вам необходимо реализовать этот метод делегата

    - (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 внизу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...