#uitableview #ios5
#uitableview #ios5
Вопрос:
О, горе мне — iOS 5 сломала мое приложение.
У меня есть UITableView, и до iOS 5 делегаты вызывались в последовательности
- viewForHeaderInSection (что позволило мне динамически создавать мой вид заголовка)
- heightForHeaderInSection (что позволило мне указать скорректированную высоту заголовка
Я только что проверил и запустил программу в симуляторе iOS 4.3 и симуляторе iOS 5.0 (и устройстве iOS 5), и точно такой же код вызывается в обратной последовательности в iOS5. ПОЧЕМУ!!!!
Состояние документов (для TableView: heightForHeadInSection 🙂
«Особые соображения
До iOS 5.0 табличные представления автоматически изменяли высоту заголовков до 0 для разделов, где TableView:viewForHeaderInSection: возвращал нулевое представление. В iOS 5.0 и более поздних версиях вы должны возвращать фактическую высоту для каждого заголовка раздела в этом методе.»
Нигде не указано, что они незаметно изменили последовательность вызовов.
Мой вопрос: Кто-нибудь сталкивался с этим и какие-либо предложения по решению этой проблемы? Мне все перекодировать? Мне нужно иметь заголовок переменной высоты, высоту которого я могу определить только после создания headerView.
Ответ №1:
да, я наблюдаю такое же поведение. Вы создаете представление заголовка в tableView:heightForHeadInSection
и повторно используете его в viewForHeaderInsection
вместо того, чтобы создавать его дважды.
До версии 5.0 вы должны были сделать аналогичную вещь для heightForRowAtIndexPath
и cellForRowAtIndexPath
, если высота известна, только после построения представления.
Ответ №2:
Просто добавьте что-то вроде этого, чтобы исправить это:
// iOS 5 и более поздние версии по-прежнему ожидают высоту при возврате nil
-(CGFloat)TableView: (UITableView *) Раздел TableView heightForHeaderInSection:(NSInteger) {
// Do some check on if this section has a header
if ([navigationSections_[section] hasHeader]) {
return 0;
} else {
// This will use the default height
return tableView.sectionHeaderHeight;
}
}