首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >动画化偏移量时移除/添加SwiftUI视图

动画化偏移量时移除/添加SwiftUI视图
EN

Stack Overflow用户
提问于 2020-07-03 14:51:10
回答 1查看 1.5K关注 0票数 1

我试图动画一个SwiftUI视图的偏移,同时淡出并移除该视图的一个子视图。我遇到的问题是,SwiftUI执行偏移和淡出动画,但不合并它们。

我想要实现的是动画化整个SubView的位置,同时淡出字幕文本,使字幕文本在淡入或淡出时垂直移动。我可以通过动画化Text的不透明度来实现这一点,而不是删除它,但这意味着文本仍将占用“布局空间”。

有办法用if showSubtitle语句来实现这个动画吗?

下面的代码和GIF演示了这个问题:

代码语言:javascript
运行
复制
struct ContentView: View {
    @State private var showSubtitle = true
    var body: some View {
        SubView(showSubtitle: showSubtitle)
            .animation(.default)
            .offset(y: showSubtitle ? 100 : 0)
            .onTapGesture {
                self.showSubtitle.toggle()
            }
    }
}

struct SubView: View {
    let showSubtitle: Bool
    var body: some View {
        VStack {
            Text("Header")
            if showSubtitle {
                Text("Subtitle")
            }
        }
    }
}

EN

Stack Overflow用户

发布于 2020-07-03 15:27:42

实际上,观察到的行为是因为.offset 不改变布局,视图位于相同的位置。因此,当您移除子视图时,它将被移除并动画化(使用默认的.opacity转换)。开始抵消的部分不包含已经包含的子视图,所以在向上移动的部分中看不到它。

这里有一些可能会产生某种效果的东西,但是转换是基于源大小的,所以它并不是手动指定的偏移量的距离。总之,试着:

代码语言:javascript
运行
复制
if showSubtitle {
    Text("Subtitle")
        .transition(AnyTransition.opacity.combined(with: AnyTransition.move(edge: .top)))
}

用Xcode 12 / iOS 14测试

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62717876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档