UITableview titleForHeaderInSection не отображается правильно - PullRequest
9 голосов
/ 02 марта 2010

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

- (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 @"";
}

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

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

Ответы [ 3 ]

5 голосов
/ 11 марта 2010

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

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

1 голос
/ 10 марта 2010

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

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

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

Вы также можете инициализировать строку в значение по умолчанию, например, NSString *sectionHeader = @"Default Header Title";. Если ни один из операторов 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 голос
/ 03 марта 2010

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

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

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