Как скрыть определенные ячейки в статическом UItableview, в swift?

никакая статья не объясняет это ясно относительно моего запроса, у меня есть три ячейки в статической таблице, и я хочу скрыть вторую ячейку, когда пользователи нажимают на первую ячейку. Любая помощь приветствуется.

3 ответов


хотя вы не можете остановить статическую таблицу от попытки показать свои ячейки, вы можете установить их высоту на ноль, делая их фактически невидимыми:

добавьте этот метод в класс делегата контроллера представления таблицы:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    let cell = super.tableView(tableView, cellForRowAtIndexPath: indexPath)
    return cell == myHiddenCell ? 0 :  super.tableView(tableView, heightForRowAtIndexPath:indexPath)
}

на didSelectCellAtIndexPath метод, вы можете установить высоту в 0, чтобы скрыть его:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    if indexPath.row == 0 {
        let indexPath = NSIndexPath(forItem: 1, inSection : 0)
        let secondCell = tableview.cellForRowAtIndexPath(indexPath)
        secondCell.frame.size.height = 0;
        self.view.layoutSubviews()
    }
}

если вы хотите анимацию, просто поставить self.view.layoutSubviews() в методе анимации UIView UIView.animateWithDuration... и т. д.


для меня установка высоты в 0 для некоторых ячеек и другой высоты для других ячеек не была опцией, так как все мои ячейки имеют разную высоту.

Я создал другую ячейку в раскадровке и установил высоту строки 0 (в инспекторе размеров). Затем в коде я показываю ячейку с height = 0, если я хочу скрыть ее, если нет, я показываю другую ячейку:

if (hideCell) {
            let hiddenCell = tableView.dequeueReusableCell(withIdentifier: "hiddenCell",for: indexPath) as! TheWallTableViewCell
            return hiddenCell
        }
else {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell",for: indexPath) as! TheWallTableViewCell
        return cell 
}