Заголовок раздела UITableView полностью черный - PullRequest
5 голосов
/ 03 июня 2009

Для iPhone у меня есть UITableView, который сгруппирован, имеет один раздел и в котором я установил заголовок раздела, который является объектом UILabel из пера. Когда отображается табличное представление, заголовок отображается в виде полосы сплошного черного цвета - без текста.

В heightForHeaderInSection я установил высоту равной frame.size.height объекта UILabel. Когда я изменяю высоту в IB, высота черной полосы меняется. Итак, я знаю, что файл .m зацепился за правый объект UILabel.

В отладчике в viewForHeaderInSection кажется, что ширина объекта UILabel равна нулю, а высота равна 1079574528, а текст равен нулю.

Есть мысли о том, что я делаю не так?

Ответы [ 5 ]

25 голосов
/ 27 августа 2009

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

#define SectionHeaderHeight 40


- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    if ([self tableView:tableView titleForHeaderInSection:section] != nil) {
        return SectionHeaderHeight;
    }
    else {
        // If no section header title, no section header needed
        return 0;
    }
}


- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    NSString *sectionTitle = [self tableView:tableView titleForHeaderInSection:section];
    if (sectionTitle == nil) {
        return nil;
    }

    // Create label with section title
    UILabel *label = [[[UILabel alloc] init] autorelease];
    label.frame = CGRectMake(20, 6, 300, 30);
    label.backgroundColor = [UIColor clearColor];
    label.textColor = [UIColor colorWithHue:(136.0/360.0)  // Slightly bluish green
                                 saturation:1.0
                                 brightness:0.60
                                      alpha:1.0];
    label.shadowColor = [UIColor whiteColor];
    label.shadowOffset = CGSizeMake(0.0, 1.0);
    label.font = [UIFont boldSystemFontOfSize:16];
    label.text = sectionTitle;

    // Create header view and add label as a subview
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, SectionHeaderHeight)];
    [view autorelease];
    [view addSubview:label];

    return view;
}
1 голос
/ 12 сентября 2009

У меня была такая же проблема, и я не совсем понял, почему черная полоса ..

НО, вместо предоставления представлений верхнего и нижнего колонтитула в методах делегатов, если я установлю значения для tableView.tableHeaderView и tableView.tableFooterView, все будет хорошо!

0 голосов
/ 16 сентября 2012

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

//[self loadView];   this caused the section header to go black.
[self.tableView reloadData]; // this works! 
0 голосов
/ 13 мая 2011

3.1.3 не нравится [UIColor clearColor]; попробуйте использовать тот же цвет фона, что и для таблицы

0 голосов
/ 03 июня 2009

Можете ли вы опубликовать код для ваших heightForHeaderInSection и ваших viewForHeaderInSection функций? Теория того, что вы делаете, звучит правильно, но, не видя код, было бы почти невозможно выяснить проблему ...

Звучит так, как будто вы размещаете ярлык на представлении в IB и пытаетесь использовать его в качестве представления заголовка - что является неправильным способом выполнения действий. Если вы не используете viewForHeaderInSection , попробуйте ... вот так:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UILabel *lbl;
    lbl.text = @"Header for The Only Section";
    //define other properties for the label - font, shadow, highlight, etc...

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