我想在 SwiftUI 中创建一个视图,动态添加一个带有动画的子视图。
struct ContentView : View {
@State private var isButtonVisible = false
var body: some View {
VStack {
Toggle(isOn: $isButtonVisible.animation()) {
Text("add view button")
}
if isButtonVisible {
AnyView(DetailView())
.transition(.move(edge: .trailing))
.animation(Animation.linear(duration: 2))
}else{
AnyView(Text("test"))
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码可以很好地处理动画。但是,当我将视图选择部分移动到函数中时,动画不再起作用(因为我想动态添加不同的视图,因此,我将逻辑放在一个函数中。)
struct ContentView : View {
@State private var isButtonVisible = false
var body: some View {
VStack {
Toggle(isOn: $isButtonVisible.animation()) {
Text("add view button")
}
subView().transition(.move(edge: .trailing))
.animation(Animation.linear(duration: 2))
}
func subView() -> some View {
if …Run Code Online (Sandbox Code Playgroud) 从 Xcode 11.4 开始,SwiftUI 不允许switch在 Function builder 块中使用语句,如VStack {},失败并出现一般错误,如Generic parameter 'Content' could not be inferred. 如何switch在 SwiftUI 中使用该语句根据枚举值创建不同的视图?