Можно ли дополнить предметы в VStack таким образом, чтобы они только толкали предметы под ним вниз, не толкая предметы над ним вверх? - PullRequest
0 голосов
/ 20 сентября 2019

Трудно сказать в названии, но вот моя ситуация.У меня есть VStack, и мне нужно анимировать пробел, формирующийся ниже элемента в стеке.

Я пытался добавить .padding (.bottom, isTapped? 50: 0) к элементам, например, ноэто не дает желаемого результата.Например, если элемент X - это элемент, к которому я прикоснулся, это поведение, которое я получаю с помощью этого метода

empty space -->  X-1
X-1         -->  X
X           -->  space created
X+1         -->  X+1
empty space -->  empty space

, в основном, как я пытался проиллюстрировать, он толкает элементы выше X вверх, а также толкаетпредметы под ним вниз.

Есть ли способ сделать то, что я пытаюсь сделать?Способ исправить X и элементы над ним на месте так, чтобы только элементы ниже сместились?

edit: вот более реальный пример, когда серединапостукивание по элементу приводит к тому, что под ним добавляется отступ, но, к сожалению, это не оставляет первые два, где они есть, и толкает третий вниз.Но он двигает первые 2 вверх и третий вниз.(Кроме того, отступы лежат не так, как показано в примере ниже, но в самом представлении элементов, если это имеет значение)

VStack{
  Item().padding(.bottom, isTapped ? 50: 0)
  Item().padding(.bottom, isTapped ? 50: 0)
  Item().padding(.bottom, isTapped ? 50: 0)
}

1 Ответ

0 голосов
/ 20 сентября 2019

VStack выбирает свой размер в соответствии с его содержимым.Похоже, что представление, содержащее VStack, имеет много дополнительного вертикального пространства.Поскольку VStack меньше своего суперпредставления, он центрируется в своем суперпредставлении (оставляя пустое пространство выше и ниже.) Когда VStack растет вертикально (при добавлении отступов), он остается центрированным и будет расти в обоих направлениях вверх и вверх.вниз.

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

    VStack {
        VStack {
            // Items:  X-1, X, X + 1                
         }
        Spacer()
    }

Если это не решит вашу проблему, пожалуйста, покажите свой код,Выравнивание и размещение представлений зависит от вашего конкретного кода.

...