Различное расположение подпредставлений UITableViewCell после касания ячейки - PullRequest
0 голосов
/ 16 апреля 2020

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

Должен ли я загрузить новую пользовательскую ячейку вместо повернутой ячейки или просто обновить рамка подвидов ячеек?

Это обычный макет:

el

Это новый макет:

el

Ограничения не являются проблемой, мой вопрос заключается в том, как добавить элементы, которые не были использованы в обычной ячейке, и теперь их необходимо перефразировать и увеличить (например, основной UIImageView и UILabel's)

1 Ответ

1 голос
/ 16 апреля 2020

Я бы имел разные ячейки и перезагрузил бы их при нажатии на ячейки.

class TableViewController: UITableViewController {

    var largeRow: IndexPath?

    var data: [Int] = [0, 1, 2, 3, 4, 5, 6, 7]

    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

extension TableViewController {

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return data.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if indexPath == largeRow {
            return makeLargeCell(at: indexPath)
        } else {
            return makeNormalCell(at: indexPath)
        }
    }
}

extension TableViewController {
    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)

        if let largeRow = largeRow {
            if largeRow == indexPath {
                self.largeRow = nil
                tableView.reloadRows(at: [indexPath], with: .fade)
            } else {
                self.largeRow = indexPath
                tableView.reloadRows(at: [largeRow, indexPath], with: .fade)
            }
        } else {
            self.largeRow = indexPath
            tableView.reloadRows(at: [indexPath], with: .fade)
        }
    }
}
...