#ios #xcode #uitableview
#iOS #xcode #uitableview
Вопрос:
В настоящее время я работаю над своим первым приложением для iOS и только что столкнулся с проблемой, которую, похоже, не могу решить. После долгих часов размышлений и борьбы я решил спросить здесь, чтобы узнать, сталкивался ли кто-нибудь с подобной проблемой и может ли мне помочь.
У меня есть UITableView с двумя прототипами ячеек. Я могу без проблем отображать оба типа ячеек, но есть небольшая загвоздка. Один тип ячейки имеет высоту 475px, а другой — только 250px. При отображении табличного представления каждая строка таблицы имеет одинаковую высоту. Я пошел дальше и отладил свою раскадровку и обнаружил, что мое табличное представление имеет высоту строки 475px. Это хорошо для более высоких ячеек, но для маленьких между ними остается пустое пространство.
Я хотел бы иметь возможность регулировать высоту каждой строки в зависимости от того, какой тип ячейки она отображается. Возможно ли это? Я думал об использовании heightForRowAtIndexPath, но поскольку на момент выполнения ячейки не существует, я не могу проверить, каков класс ячейки с определенным индексом. Кроме того, в моей раскадровке я указал высоту для каждого из двух прототипов ячеек, но это не отражается во время выполнения. У кого-нибудь есть идея, как решить проблему такого рода? Заранее благодарю.
Ответ №1:
Вам нужно использовать heightForRowAtIndexPath
, но вы не должны проверять таблицу, чтобы узнать, какая ячейка находится в каком индексе. Вы должны проверять свой источник данных.
Например, у cellForRowAtIndexPath
вас будет что-то вроде…
if ( /*some condition*/ ) {
cell = //dequeue cell type 1
} else {
cell = //dequeue cell type 2
}
Итак, в heightForRow
вы выполняете точно такую же проверку.
if ( /*some condition*/ ) {
return 475;
} else {
return 250;
}
Комментарии:
1. Это имеет смысл! Я продолжу и реализую его и вернусь с ответом. Спасибо!
2. Не беспокойтесь, рад помочь 🙂
3. Правда ли, что путь heightForRowAtIndex снижает производительность? слышал это где-то еще на SO, но не могу вспомнить где.
Ответ №2:
Вам необходимо реализовать высоту ячейки, которую вы хотите, в UITableViewDelegate с помощью TableView:heightForRowAtIndexPath:
Вероятно, у вас есть какая-то логика в удалении ячеек, где вы решаете, какую ячейку вы хотите для такого рода данных. Вам нужно использовать ту же логику, чтобы выяснить, какую ячейку вы собираетесь там использовать, и вернуть для этого высоту.
Метод heightForRowAtIndexPath вызывается до того, как вы фактически создадите свою ячейку. Это может представлять некоторую проблему.
Комментарии:
1. Спасибо за ваш ответ. Этот плюс тот, который сделан @Fogmaster, указал мне правильное направление. Хорошего дня, сэр!