Я пытаюсь создать представление стека с помощью UIStackView
, которое всегда показывает максимум 3 представления, но также может отображать ни одно, 1 или 2 представления одновременно.
Весь вид стека должен быть динамическим. В начале представление стека пусто. Другая функция добавит новый вид вверху с помощью stackView.insertArrangedSubview(at: 0)
. Если добавляется другое представление, то предыдущее представление с индексом 0 должно быть перемещено в индекс 1. Вот почему я выбрал UIStackView
, так как он заботится об изменении порядка существующих представлений.
Когда вставляется третий вид, два других снова перемещаются вниз по слоту. Теперь, если будет добавлено четвертое представление, все предыдущие три представления снова переместятся вниз, но четвертое представление будет удалено из представления стека.
Однако здесь есть небольшое дополнительное условие:
Представление в первом индексе всегда должно быть в два раза больше, чем оставшиеся 2 представления. Таким образом, первое представление должно составлять 50% всего представления стека. Таким образом, представления с индексом 1 и 2 должны иметь высоту 25%.
Если вставляется новое представление, представление, находящееся в данный момент в индексе 0, должно будет сжаться, переместиться вниз в середину и переместиться в индекс 1 представления стека.
Идея аналогична тому, как работает Система уведомлений Growl.
На этом изображении показан базовый макет того, как должны выглядеть представления.
Итак, теперь вопрос в том, является ли UIStackView
правильным способом решения этой проблемы или будет лучше работать только с ограничениями (например, с SnapKit
)? Даже с UIStackView
мне, вероятно, потребуется много ограничений, чтобы выполнить требования.
Так что, может быть, мне просто нужно иметь функцию addNewView
, которая обновляет все ограничения и вызывает layoutIfNeeded
в блоке UIView.animate
, чтобы переход представления отталкивал другие, а последнее представление вытеснялось?
Ребята, что вы думаете? Если существует структура, которая уже делает что-то подобное, я также был бы признателен за указатели.