Доступ к «стандартным» методам UITableView - PullRequest
2 голосов
/ 11 января 2011

Я пытаюсь настроить tableView.Я использую стандартные ячейки для всех строк разделов, кроме последней (содержащей одну строку).Таким образом, я также хотел бы использовать стандартную компоновку для всех этих секций, кроме этой специальной.

Ниже приведен короткий пример, моя «специальная» ячейка находится в секции 3 (есть только одна строка):

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    if (section == 3)
        return 5;
    return **????**;
}

При ??? Я хотел бы вернуть ширину, рассчитанную по UITableView (как если бы я не реализовывал метод).

[super self: tableView heightForHeaderInSection: (NSInteger) section];

не работает.Я знаю, что могу получить доступ к

[tableView setionHeaderHeight]

, который по умолчанию равен 10 и, очевидно, не учитывает наличие заголовков разделов для других разделов, что потребует дополнительного места.Я пытался это сделать, но затем разделы получатся слишком близкими (см. Скриншот):

(Примечание: интересующий меня раздел не похож на ячейку: тот, что с датами (невидимый фон)).alt text

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

Какие у меня варианты?

Ответы [ 4 ]

6 голосов
/ 17 февраля 2012

На всякий случай: в iOS 5 введена новая константа, которая называется UITableViewAutomaticDimension.Как сказано в документации, вы должны вернуть его из метода делегата, когда вы хотите, чтобы UITableView использовал значение по умолчанию.

Итак, код для вашего случая будет:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    if (section == 3) {
       return 5;
    } else {
       return UITableViewAutomaticDimension;
    }
}
3 голосов
/ 11 января 2011

Вы, похоже, немного озадачены вопросом heightForHeaderInSection - он возвращает высоту заголовка раздела таблицы (это «заголовок» раздела таблицы), а не строки. iOS вызывает этот метод, чтобы запросить высоту только одного заголовка раздела, независимо от того, какие там могут быть другие заголовки раздела.

Если вы хотите использовать значение по умолчанию, просто верните [tableView sectionHeaderHeight] для любого раздела, кроме 3 - вам не нужно «учитывать, что [у вас есть] другие заголовки раздела», так как он запрашивает высота заголовка только для section. Он снова запросит высоту других (и автоматически вычислит относительное положение строк и других разделов).

1 голос
/ 11 января 2011

У вас нет супер реализации tableView:heightForHeaderInSection:, так как вы не создаете подклассы для какой-либо абстрактной базовой реализации для UITableViewDelegate.Вместо этого табличное представление решается, следует ли использовать высоту по умолчанию, проверяя реализацию вашего делегата, чтобы увидеть, доступен ли метод.

Это довольно большая концепция, чтобы обернуть вашу голову, особенно если она приходит из Javaили C #.Методы в протоколах Objective-C могут быть необязательными, и их отсутствие означает использовать значение по умолчанию .

Ваш метод, вероятно, должен быть реализован как:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    if (section == 3) {
       return 5;
    } else {
       return 36;
    }
 }

Высота по умолчанию длясгруппированные и простые таблицы различаются (22 точки для простого).Значения по умолчанию не предоставляются UITableView, даже как частные методы.Ошибка файла http://bugreport.apple.com, чтобы сделать ее общедоступной константой.

0 голосов
/ 31 декабря 2011

После переопределения heightForHeaderInSection и параллельного сравнения высота заголовка в первой строке больше, чем у остальных.Это не идеальный пиксель, но он очень близок:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if (section == 0 ) {
        return 46.0;
    } else if (section == myCustomRow) {
        return 12345.0; // custom height
    } else {
        return 36.0;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...