SwiftUI:动画偏移以从屏幕外滑入

Xma*_*hts 4 animation ios swiftui

我正在尝试在其父视图底部的视图中设置动画。通过设置偏移动画可以相对容易地做到这一点,如下所示:

struct ContentView: View {

    @State var isShowingBanner = true

    var bannerOffset: CGFloat {
        isShowingBanner ? 0 : 60
    }

    var body: some View {
        VStack {
            VStack {
                Spacer()

                BannerView()
                    .offset(y: bannerOffset)
            }
            .border(Color.black, width: 1.0)
            .clipped()


            Spacer()

            Button("Toggle Banner") {
                withAnimation {
                    isShowingBanner.toggle()
                }
            }
        }
        .padding()
    }
}
Run Code Online (Sandbox Code Playgroud)

点击切换按钮可设置偏移动画

明显的问题是,这只是使用任意值作为动画偏移,并且在考虑动态类型时很快就会崩溃

动画偏移小于视图的高度

我的问题是:

有没有办法正确确定高度BannerView以正确调整此动画。或者有没有更好的方法来达到这个效果?

谢谢大家

Asp*_*eri 9

只需通过过渡即可完成,例如

演示

使用 Xcode 13.3 / iOS 15.4 进行测试

struct ContentView: View {

    @State var isShowingBanner = true

    var body: some View {
        VStack {
            VStack {
                Spacer()

                if isShowingBanner {
                    BannerView()
                        .transition(.move(edge: .bottom))  // << here !!
                }
            }
// >> empty container should not shrink !!
            .frame(maxWidth: .infinity, maxHeight: .infinity) 
            .border(Color.black, width: 1.0)
            .clipped()


            Spacer()

            Button("Toggle Banner") {
                withAnimation {
                    isShowingBanner.toggle()
                }
            }
        }
        .padding()
    }
}
Run Code Online (Sandbox Code Playgroud)