【问题标题】:SwiftUI insertion transion is not working when view added添加视图时,SwiftUI 插入转换不起作用
【发布时间】: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 中按预期工作。

标签: swiftui


【解决方案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()
    }
    

    【讨论】:

    • 谢谢,但它仍然无法正常工作...当我触摸按钮时,文本会随着移动过渡弹出并消失。
    猜你喜欢
    • 1970-01-01
    • 2020-03-29
    • 2020-01-29
    • 2020-08-10
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    相关资源
    最近更新 更多