Изменить размер iOS-таблицы, содержащей несколько представлений - PullRequest
0 голосов
/ 12 мая 2019

Я ищу способ изменить размер ячейки tableView с более сложной компоновкой.

Для упрощения описания проблемы ячейка tableview состоит из трех представлений. Одно представление, которое определяет «фон» ячейки и два дополнительных представления (каждое из которых имеет высоту 45% от фона ячейки. Один из этих дополнительных видов помечается сверху фона, другой - снизу. Если пользователь нажимает на ячейку табличного представления, она должна сжиматься таким образом, чтобы была видна только верхняя часть изображения, и после дополнительного касания пользователя она должна снова изменить свой размер до полного размера.

Касание пользователя обрабатывается функцией

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)

и изменение размера выполняется

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat

К сожалению, после уменьшения ячейки табличного представления оба дополнительных представления отображаются с половиной их первоначальной высоты.

    var selectedCell = -1

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
    {
        tableView.deselectRow(at: indexPath, animated: true)
        if (selectedCell != indexPath.row)
        {
            selectedCell = indexPath.row
        }
        else {
            selectedCell = -1
        }
        tableView.beginUpdates()
        tableView.endUpdates()

    }

    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        if (indexPath.row == selectedCell)
        {
            return 65
        }
        else {

            return UITableView.automaticDimension
        }
    }

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

Заранее спасибо Patrick

1 Ответ

0 голосов
/ 12 мая 2019

Причина в том, что когда ячейка сокращается, ваши представления (поскольку их размеры определяются относительно размера родителя) также уменьшаются и становятся видимыми с половинным размером.Они на самом деле не исчезли / скрыты от глаз.Что вам нужно, это скрыть / удалить их из представления.

Из вашего описания видно, что вы используете простые ограничения для достижения этой цели.Это можно сделать, просто используя ограничения, но это намного больше работы.Поэтому я упомяну два способа сделать это:

  1. Используя только ограничения

Когда пользователь касается вашей ячейки, вам нужно сделать высоту вида снизу 0Кроме того, если вы не хотите, чтобы средняя 10% -ная часть отображалась при уменьшении ячейки, вам необходимо создать дополнительное ограничение от нижней части вида сверху до нижней части contentView ячейки.Точно так же ваш вид снизу также будет иметь два ограничения по высоте, одно для 45% и одно для 0. Идея состоит в том, чтобы оба эти ограничения были одновременно, но с разными приоритетами.Первоначальное ограничение будет иметь более высокий приоритет, а другое будет иметь более низкий приоритет.Хотя эти ограничения будут противоречивыми, для визуализации представления будет выбран iOS с более высоким приоритетом.

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

Использовать представление стека:

В iOS 9 введено представление стека, которое является вспомогательным представлением.Это в основном, обрабатывает ограничения для вас, по крайней мере, некоторые его части.Когда вы скрываете одно представление от дочерних элементов представления стека, представление стека автоматически сделает высоту этого представления равной 0. Прочитайте больше о вертикальном представлении стека, и вы поймете идею.

...