添加视图时,SwiftUI 插入转换不起作用

Posted

技术标签:

【中文标题】添加视图时,SwiftUI 插入转换不起作用【英文标题】:SwiftUI insertion transion is not working when view added 【发布时间】:2020-11-12 08:26:26 【问题描述】:

我正在苹果开发者页面中尝试 SwiftUI 教程。现在我正在学习过渡教程,但添加视图时我的过渡不起作用。

这是我的代码。

VStack(alignment: .leading) 
            
    HStack() 
            
        // title
        Text(titleText)
            .font(.headline)
            .padding()
            
        Spacer()
            
        // button
        Button(action: 
            withAnimation     
                self.showDetail.toggle()
            
        ) 
            Image(systemName: "chevron.right.circle")
                .imageScale(.large)
                .rotationEffect(.degrees(showDetail ? 90 : 0))
                .padding()
        
    
        
    // detail
    if showDetail         
        Text(contentText)
            .transition(.slide)
            .padding()
    

我认为具有 contentText 的文本应该出现幻灯片过渡,但是当我按下按钮时,它就会弹出。但是当我再次按下按钮时,它会随着过渡而消失。所以移除过渡是可行的。

我该如何解决这个问题?

【问题讨论】:

在 Xcode 12.1 / ios 14.1 中按预期工作。 【参考方案1】:

经过一番测试,我找到了一些解决方案。

解决方案 1: 这只是 XCode 画布的错误。 它可以在模拟器或真机上运行。

解决方案2.(如果你真的想在画布上做)

Button (action : 
    withAnimation(.easeInOut)     // add animation manually
        self.showDetail.toggle()
    
) 
    // label Image no change


if showDetail 
    Text(contentText)
        .transition(.slide)
        .animation(.easeInOut)    // match with withAnimation

【讨论】:

【参考方案2】:

虽然我还没有完成您所说的教程,但我认为使用 .move 过渡而不是 .slide 过渡效果很好。 这是我的详细代码部分(其余部分未更改)。希望我的回答能帮到你

if showDetail 
    Text(contentText)
        .transition(.move(edge: .leading))
        .padding()

【讨论】:

谢谢,但它仍然无法正常工作...当我触摸按钮时,文本会随着移动过渡弹出并消失。

以上是关于添加视图时,SwiftUI 插入转换不起作用的主要内容,如果未能解决你的问题,请参考以下文章

添加手势后SwiftUI TextField不起作用

使用功能swiftUI将视图添加到contentView不起作用

嵌入另一个视图时,SwiftUI 动画不起作用

以编程方式一个接一个地关闭 SwiftUI 视图不起作用

滚动视图中元素的 SwiftUI 动画不起作用? Xcode GM 更新

我正在使用 NavigationLink 在视图之间导航,但它在 SwiftUI 的单个视图中不起作用