Как изменить высоту UITableViewCell при изменении ограничений?

«Это» - все о сфере охвата. Каждая функция имеет свою собственную область действия, и поскольку все в JS является объектом, даже функция может хранить некоторые значения в себе, используя «this».

$('#a').click(function(){
console.log($(this).attr('href'));
});
0
задан iOS Calendar View OnMyProfile 13 July 2018 в 17:00
поделиться

2 ответа

Вам нужно установить нижнее ограничение на красное представление, чтобы автомакет мог растянуть ячейку после установки постоянного значения

extension ViewController: UITableViewDataSource, UITableViewDelegate {

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "c", for: indexPath) as! customcell
        configure(cell: cell, indexPath: indexPath)
        cell.redview.backgroundColor = .red
        cell.selectionStyle = .none
        return cell
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let cell = tableView.cellForRow(at: indexPath) as! customcell
        cell.constraint.constant = data[indexPath.row] == "contracted"  ? 30 : 200
        data[indexPath.row] = data[indexPath.row] == "contracted" ? "expanded" : "contracted"
        tableView.reloadData()
    }

    func configure(cell: customcell, indexPath: IndexPath) {
        let data = self.data[indexPath.row]
        if data == "expanded" {
            cell.constraint.constant = 200
        } else {
            cell.constraint.constant = 30
        }

        cell.layoutIfNeeded()
    }
}
2
ответ дан Sh_Khan 17 August 2018 в 12:22
поделиться
  • 1
    вы должны сделать это, он дает конфликт, потому что он предлагает предварительную высоту до того, как авто-макет установит правильную высоту в соответствии с содержимым, которое вы можете установить приоритет этого нижнего ограничения на 999, чтобы предотвратить конфликт – Sh_Khan 14 July 2018 в 12:25
  • 2
    в противном случае вы установили его на 30, чтобы заставить его сказать 300 и проверить? – Sh_Khan 14 July 2018 в 12:53
  • 3
    Пробовали ли вы это в примере zip-файла, представленном выше? Это не работает :( Вот мой обновленный проект в соответствии с тем, что вы сказали - & gt; github.com/patchthecode/JTAppleCalendar/files/2194962/test.zip – iOS Calendar View OnMyProfile 14 July 2018 в 13:44
  • 4
    Да, попробовал, и он работает, вы устанавливаете данные в Contacted в массиве, так что else запускается там, где вы устанавливаете константу ограничения на 30, вы можете ошибочно полагать, что если будет работать с константой 200 – Sh_Khan 14 July 2018 в 13:51
  • 5
    @Sh_Khan Если меняются только размеры, то комманда beginUpdates & endUpdates превосходит ваше решение. Перезагрузка всей таблицы часто имеет другие серьезные последствия. layoutIfNeeded в любом случае не требуется. – Sulthan 14 July 2018 в 16:37

Вызов ниже будет пересчитывать высоты.

[tableView beginUpdates];
[tableView endUpdates];
0
ответ дан particleman 17 August 2018 в 12:22
поделиться
  • 1
    где я могу поставить этот код – iOS Calendar View OnMyProfile 14 July 2018 в 10:16
  • 2
    Это зависит от того, как вы активируете изменение высоты. Если это сделано в ячейке, вам, вероятно, понадобится обратный вызов делегата для вашего контроллера табличного представления, поскольку в ячейке нет ссылки на tableView. Как stackoverflow.com/questions/1110482/… . – particleman 14 July 2018 в 17:18