tableView.tableHeaderView устанавливается, но не рисуется - PullRequest
11 голосов
/ 06 августа 2010

всякий раз, когда я устанавливаю свой tableHeaderView, я не вижу его в симуляторе. Если я добавлю его в качестве подпредставления, он окажется нарисованным под заголовком раздела. Есть идеи, что мне здесь не хватает?

У меня есть файл XIB. Я не видел никаких свойств в IB, которые влияли бы на headerViews.

- (void)viewDidLoad {   
[super viewDidLoad];
MyTitleView *titleView = [[MyTitleView alloc] initWithFrame:CGRectMake(60,0,260,40)];
titleView.label.text = @"My Title";
self.navigationItem.titleView = titleView;
[titleView release];

StandardTableHeaderView *headerView = [[StandardTableHeaderView alloc] initWithFrame:CGRectMake(0,0,320,44)];
self.tableView.tableHeaderView = headerView;
//  [self.view addSubview:self.tableView.tableHeaderView];
//  [headerView release];


NSLog(@"Header: %@",self.tableView.tableHeaderView); //Logs ] Header:     <StandardTableHeaderView: 0x5a508b0; frame = (0 0; 320 44); layer = <CALayer: 0x5a51130>>

Edit: Метод инициализации StandardTableHeaderView.m:

- (id)initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
    self.backgroundColor = [UIColor redColor];
    self.label = [[UILabel alloc] initWithFrame:CGRectMake(frame.origin.x,0,frame.size.width,frame.size.height)];
    self.label.backgroundColor = [UIColor clearColor];
    self.label.textColor = [UIColor whiteColor];
    self.label.font = [UIFont fontWithName:@"Helvetica" size:16];
    [self addSubview:self.label];
}
return self;
}

Ответы [ 7 ]

7 голосов
/ 08 августа 2010

Прежде всего ваш код выглядит нормально.

2 возможных проблемы:

  • self.tableView не установлено
  • tableHeaderView переопределяется после viewDidLoad
6 голосов
/ 26 ноября 2012

Внимание! Если вы ожидаете, что табличное представление задает для вас рамку представления заголовка, вы ошибаетесь и получите очень странные результаты.

Я установил мой CGRectZero, думая, что он решит сам, но вещь не появится, и когда это произойдет, она окажется скрытой под навигационной панелью или торчит в первую ячейку и тому подобное.

6 голосов
/ 16 марта 2012

У меня была та же проблема, и я заметил, что любой tableViewHeader, который я определил в моем NIB, не появился бы, если бы я инициализировал свой просмотр таблицы, вызвав:

- (id)initWithStyle:(UITableViewStyle)style

Но он волшебным образом появился без труда, когда я инициализировал свой просмотр таблицы с помощью:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

Weird.

2 голосов
/ 08 октября 2013

Я попытался поместить настройку tableHeaderView в ViewDidLoad и loadView методах - это не сработало: часть вида была белой, не видна полностью. Затем я попытался установить значение ViewDidAppear, и оно заработало:

- (void)viewDidAppear:(BOOL)animated
{
  [super viewDidAppear:animated];

  [self setupTableHeaderView];
}
0 голосов
/ 26 февраля 2018

когда вы UIView внутри UITableView в раскадровке и пытаетесь установить tableView.tableHeaderView = YOUR_VIEW, это не будет работать. Вы должны сначала перетащить этот вид вне контроллера вида, создать его выход, а затем установить

tableView.tableHeaderView = YOUR_VIEW

0 голосов
/ 23 августа 2014

У меня была проблема, когда я помещал представление в tableviewcontroller в качестве заголовка, и он не отображался при запуске приложения, проблема заключалась в том, что я добавлял заголовок, когда не было ячеек прототипа. если вы добавите хотя бы одну ячейку прототипа, затем добавите заголовок над ней, а затем удалите ячейку (при необходимости), она правильно зарегистрировала ее как представление заголовка

0 голосов
/ 03 мая 2013

Попробуйте установить UITableViewDelegate в своем заголовке и поместите следующий код в свой файл .m.

#pragma mark UITableViewDelegate
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { 
    return 44.0f;
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    StandardTableHeaderView *headerView = [[StandardTableHeaderView alloc] initWithFrame:CGRectMake(0,0,320,44)];

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