Я устанавливал высоту ячеек для своего представления таблицы с помощью
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
switch indexPath.section {
case 0:
return 100
case 1:
tableView.estimatedRowHeight = 100
return UITableViewAutomaticDimension
default:
return 0
}
}
При этом для всех строк в разделе 1 высота строки установлена на 100. Теперь я хотел бы изменить высоту строки конкретной строки на 0 (т.е. сделать ее скрытой) при нажатии кнопки.
Я пытался:
tableView.cellForRow(at: IndexPath(item: selectedIndex, section: 1))?.isHidden
Хотя ячейка скрыта, у меня остается пустая ячейка, занимающая высоту строки.
Поэтому я думаю, что мне следует изменить высоту строки на 0.
P.S. Я знаю, что этого можно достичь, удалив конкретную строку из модели и используя deleteRows (в indexPaths: [IndexPath], с анимацией: UITableView.RowAnimation). Но я не хочу менять модель. Как это может быть сделано?
Почему бы вам не использовать только UITableViewAutomaticDimension и поиграть с constraints, чтобы изменить высоту всех ячеек в соответствии с subviews в ячейке.





Используйте флажок, чтобы проверить, нажали ли вы кнопку. Затем перезагрузите таблицу после нажатия кнопки.
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return indexPath.section == 0 ? buttonClicked && indexPath.row == 0 ? CGFloat.leastNormalMagnitude : 100 : UITableViewAutomaticDimension
}
Более длинная, более читаемая версия: -
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
switch indexPath.section {
case 0:
if buttonClicked && indexPath.row = rowIndex //index of required row which you can find out and store in a variable wherever necessary {
return CGFloat.leastNormalMagnitude
}
return 100
case 1:
tableView.estimatedRowHeight = 100
return UITableViewAutomaticDimension
default:
return 0
}
}
При этом все ячейки в этом разделе получат наименьшую высоту NormalMagnitude. Но хочу только первую ячейку.
@ Anbu.karthik, я бы не стал жертвовать удобочитаемостью ради меньшего количества кода.
Я предпочитаю длинную версию.
в методе func tableView (_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat, верните 0,00001 для вашей конкретной ячейки, потому что возвращение 0 даст ячейке высоту по умолчанию