SwiftUI - странная анимация - PullRequest
1 голос
/ 17 июня 2020

У меня есть изображение кнопки. Предполагаемый результат - когда я нажимаю кнопку / изображение, под ним появляется список элементов. Однако почему-то само изображение сжимается при нажатии. Как я могу предотвратить сжатие изображения и просто заполнение элементов под изображением?

struct HabitGroups: View {
    var imageName: String
    var textOverlay: String
    var listOfHabits: [String]
    @Binding var selectedHabitList: [String]
    @Binding var enoughHabits: Bool

    @State var showHabits = false

    var body: some View {
        VStack {
            Button(action: {
                withAnimation {
                    self.showHabits.toggle()
                }
            }) {
                Image(self.imageName)
                    .resizable()
                    .scaledToFit()
                    .frame(minWidth: 300, minHeight: 100)
                    .overlay(ImageOverlay(textOverlay: self.textOverlay), alignment: .bottom)
            }
            .buttonStyle(PlainButtonStyle())

            if self.showHabits {
                ForEach(self.listOfHabits, id: \.self) { habit in
                    AddHabitButtons(habit: habit, selectedHabitList: self.$selectedHabitList, enoughHabits: self.$enoughHabits)
                }
            }
        }
    }
}

До анимации

После анимации

1 Ответ

0 голосов
/ 17 июня 2020

У вас должно быть много элементов под изображением, чтобы они поместились без изменения размера всего на экране (поскольку вы поместили все в VStack), поэтому изображение сжимается, как есть .resizalbe.

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

if self.showHabits {
  ScrollView {                                            // << here !!
    ForEach(self.listOfHabits, id: \.self) { habit in
        AddHabitButtons(habit: habit, selectedHabitList: self.$selectedHabitList, enoughHabits: self.$enoughHabits)
    }
  }
}

. Другой вариант - сделать изображение фиксированным по высоте, но в этом случае показанные привычки будут sh отображаться за пределами экрана. Однако предполагаемое поведение неясно, в любом случае здесь

.buttonStyle(PlainButtonStyle())
.fixedSize(horizontal: false, vertical: true)           // << here !!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...