Как изменить высоту ячейки таблицы в зависимости от ее видимых элементов? - PullRequest
0 голосов
/ 04 февраля 2019

В приведенном ниже коде есть функция, которая скрывает элементы ячейки UITableView при нажатии кнопки.Как бы я изменил высоту ячейки на основе оставшихся видимых элементов?Каждая ячейка представляет собой строку.

Я пытался использовать автоматический UITableView.automaticDimension для изменения размера ячейки, но это не сработало.

Вот мое видение того, как должна работать эта настраиваемая ячейка: ячейкаотображается с полным содержимым после создания.При нажатии определенной кнопки все элементы ячейки под кнопкой скрываются, оставляя только кнопку и элементы на том же уровне высоты, что и кнопка, оставшаяся с высотой ячейки, перенастроенной для видимых элементов.Затем, после повторного нажатия этой кнопки все содержимое ячейки будет показано еще раз с соответствующим размером ячейки, чтобы вместить ее.

func customCellDidTapCollapse(_ cell: customCell) {
    if collapsed {
        cell.item1.isHidden = false
        cell.item2.isHidden = false
        cell.item3.isHidden = false
        cell.item4.isHidden = false
        collapsed = false
    } else {
        cell.item1.isHidden = true
        cell.item2.isHidden = true
        cell.item3.isHidden = true
        cell.item4.isHidden = true
        collapsed = true
    }
}

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Мое решение:

  1. объявить логическую переменную в DataModel как "isOpen" или "открытое"
  2. Инициализировать "открытую" переменную всех данных как ложное
  3. В вашем tableViewDelegation переопределите функцию

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if data[indexPath.row].opened {
        return 150
    } else {
        return 50
    }
    

    }

  4. Переопределите tableViewDelegate (_: didSelectRowAt:)

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    //If last opened cell is different than selected now, close the last opened cell
    
    if lastOpened != indexPath.row {
       data[lastOpened].opened = false
    }
    //Hold the last opened cell index
    lastOpened = indexPath.row
    let isOpen = data[indexPath.row].opened
    //Open/close
    data[indexPath.row].opened = isOpen ? false : true
    myTable.reloadData()
    

    }

0 голосов
/ 04 февраля 2019

Я думаю, что вы можете использовать метод tableView (_: heightForRowAt :) и возвращать 0 или другое ненулевое значение на основе вашего «свернутого» логического значения.

Проверьте больше здесь: https://developer.apple.com/documentation/uikit/uitableviewdelegate/1614998-tableview

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...