UITableview titleForHeaderInSection, не отображающийся правильно

У меня есть некоторый ОЧЕНЬ простой код для возврата заголовка для заголовка раздела:

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    if (section==0) {
        return @"";
    } else if (section==1) {
        return @"Actions";
    } else if (section==2) {
        return @"Attached To";
    }

    return @"";
}

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

У кого-либо есть какая-либо идея, что могло вызывать это? Я думаю, что это - больше последней разработки, но это, кажется, происходит всего UITableViews в моем приложении. Я не хочу говорить, что это - 3,2 проблемы, но они, возможно, начали происходить вокруг тогда, но так или иначе они должны быть связаны с кодом так или иначе.Спасибо.

9
задан mjdth 2 March 2010 в 04:16
поделиться

3 ответа

Я разобрался: на самом деле проблема в коде была в возврате @"". Если вы возвращаете пустую строку вместо nil, это приводит к проблеме с отображением верхних и нижних колонтитулов.

Чтобы все верхние и нижние колонтитулы отображались правильно, нужно вернуть строку с нулем. Возврат пробела @" " все равно оставит вертикальное пространство для заголовка, так что это не является жизнеспособным вариантом. Я изменил все случаи return @""; на просто return nil;

5
ответ дан 4 December 2019 в 23:06
поделиться

Я скопировал и вставил ваш код в один из моих проектов, и он работает безупречно. (sdk 3.2.1)

Может быть, ошибка в другой части? Создаете ли вы собственные ячейки таблицы? Если да, то возвращаете ли вы соответствующую высоту из "tableView:heightForRowAtIndexPath:"? (эта проблема меня однажды настигла)

1
ответ дан 4 December 2019 в 23:06
поделиться

При настройке заголовков заголовков разделов я лучше использую пустую строку NSString, которая устанавливается в соответствующий раздел, а затем освобождаю эту строку по завершении ; а также ограничение моего использования вложенными статуями If () Else ().

Я стараюсь, чтобы это было просто и чисто. Конечно, для тех таблиц, где у меня более трех разделов, я использую оператор «Switch» вместо операторов If ().

Самое замечательное в этой функции то, что она вызывается столько раз (количество секций), сколько у вас есть, и каждый раз будет проходить через код. NSString * sectionHeader = nil; дает компилятору значение, которое должно быть возвращено, независимо от того, что встроено в ваши операторы If (). В противном случае вы получите предупреждения, потому что компилятор не выполняет поиск возвращаемого значения в операторах If ().

Вы также можете инициализировать String значением «По умолчанию», например NSString * sectionHeader = @ "Заголовок заголовка по умолчанию"; . Если ни один из операторов If () не удовлетворен, то выделенное значение заголовка по умолчанию останется неизменным во всей функции и, таким образом, будет возвращено как sectionHeader для заголовка.

Базовая структура ниже:

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {

//TEMP SECTION STRING HOLDER:
NSString *sectionHeader = nil;


//SET TITLE FOR EACH SECTION:
if(section == 0) {
    sectionHeader = @"Section Header No. 1";
}

if(section == 1) {
    sectionHeader = @"Section Header No. 2";
}

if(section == 2) {
    sectionHeader = @"Section Header No. 3";
}


//RETURN THE SECTION HEADER FOR EACH SECTION:
return sectionHeader;

}
1
ответ дан 4 December 2019 в 23:06
поделиться