Как заставить анимацию работать внутри ScrollView в SwiftUI?Анимация в стиле аккордеона в SwiftUI - PullRequest
1 голос
/ 23 сентября 2019

Я пытаюсь создать аккордеонный стиль с анимацией, используя SwiftUI.Но анимации не работают должным образом, если я помещаю их в ScrollView. Ниже приведен код, который я пытаюсь разработать.

struct ParentView: View {
    @State var isPressed = false
    var body: some View {
        GeometryReader { geometry in
            ScrollView {
                Group {
                    SampleView(index: 1)
                    SampleView(index: 2)
                    SampleView(index: 3)
                    SampleView(index: 4)
                }.border(Color.black).frame(maxWidth: .infinity)
            }.border(Color.green)
        }
    }
}

struct SampleView: View {
    @State var index: Int
    @State var isPressed = false
    var body: some View {
        Group {
            HStack(alignment:.top) {
                VStack(alignment: .leading) {
                    Text("********************")
                    Text("This View = \(index)")
                    Text("********************")
                }
                Spacer()
                Button("Press") { self.isPressed.toggle() }
            }

            if isPressed {
                VStack(alignment: .leading) {
                    Text("********************")
                    Text("-----> = \(index)")
                    Text("********************")
                }.transition(.slide).animation(.linear).border(Color.red)
            }
        }

    }
}

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

enter image description here

enter image description here

1 Ответ

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

Чтобы сделать его одушевленным, заверните self.isPressed.toggle() в закрытие withAnimation.

Button("Press") { withAnimation { self.isPressed.toggle() } }

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...