Swiftui 不可见过渡移除动画

Swiftui 不可见过渡移除动画,swiftui,Swiftui,我遇到了一个我无法完全满意地修补的问题 我有一个主视图,它可以更改environmentObjectSelectionObject以显示链接枚举中的ZStack内容*。问题是当MasterView中有背景时,删除转换几乎是不可见的(Color.gray,当我设置不透明度时,动画会有一点可见,但除非它达到较低的数值,FirstView或SecondView的整体不透明度会受到影响。在MasterView 这是我的密码: class SelectionObject: ObservableObject

我遇到了一个我无法完全满意地修补的问题

我有一个
主视图
,它可以更改environmentObject
SelectionObject
以显示
链接
枚举中的ZStack内容*。问题是当
MasterView中有背景时,删除转换几乎是不可见的(
Color.gray
,当我设置不透明度时,动画会有一点可见,但除非它达到较低的数值,
FirstView
SecondView
的整体不透明度会受到影响。在
MasterView

这是我的密码:

class SelectionObject: ObservableObject {
    @Published var selection: Link? = nil
}

struct MasterView: View {
    @EnvironmentObject var selection: SelectionObject
    
    var body: some View {
        ZStack {
            Color.gray
            VStack {
                ForEach(Link.allCases) { menu in
                    Button(action: {
                        selection.selection = menu
                    }, label: {
                        Label(menu.title, systemImage: menu.image).padding()
                    }
                    )
                    .tag(menu)
                }
            }
            
            ForEach(Link.allCases) { menu in
                if menu == selection.selection {
                    menu.contentView
                        .transition(AnyTransition.slide)
                        .animation(.spring())
                    
                }
                
            }
        }
    }
}

struct Menu_Previews: PreviewProvider {
    static var previews: some View {
        MasterView().environmentObject(SelectionObject())
    }
}


struct FirstView: View {
    @EnvironmentObject var selection: SelectionObject
    var body: some View {
        ZStack {
            Color.orange
            VStack {
                Text("First View content")
                Button(action: {
                    selection.selection = nil
                }, label: {
                    Text("Get back with a nice animation").padding().foregroundColor(.white)
                }
                )
            }
        }
    }
}

struct SecondView: View {
    @EnvironmentObject var selection: SelectionObject
    var body: some View {
        ZStack {
            Color.orange
            VStack {
                Text("Second View content")
                Button(action: {
                    selection.selection = nil
                }, label: {
                    Text("Get back with a nice animation")
                }
                )
            }
        }
    }
}


enum Link: Int, CaseIterable, Identifiable {
    var id: Int {
        return self.rawValue
    }
    
    case first
    case second
    
    var title: LocalizedStringKey {
        switch self {
        case .first: return "First"
        case .second: return "Second"
        }
    }
    
    var image: String {
        switch self {
        case .first: return "icloud"
        case .second: return "display"
        }
    }
    
    var contentView: AnyView {
        switch self {
        case .first: return AnyView ( FirstView() )
        case .second: return AnyView ( SecondView() )
        }
    }
}
我曾尝试使用zIndex方法(这里提到:),但无法使其工作,因为它只工作了一次,并且在第二次单击时没有显示内容

你能帮我找到解决这个问题的办法吗

  • 我之所以使用它,是因为我不能使用
    NavigationView
    ,因为我的
    MasterView
    在不同的NavigationView中的覆盖中使用,并且存在帧、偏移和拐角半径问题,除非我删除偏移或拐角半径,否则无法单击任何内容

只需在
菜单中添加一个
zIndex
。contentView
将始终位于顶部。因此,您可以看到背面动画

menu.contentView
    .id(UUID()) // << add id here 
    .transition(AnyTransition.slide)
    .animation(.spring())
    .zIndex(50) //<< set higher zIndex here
menu.contentView

.id(UUID())//不幸的是,它多次对我不起作用->我有,同样的问题甚至在模拟器中也存在。第一次单击OK,然后它就什么都不起作用了。编辑:同样的问题仍然存在于我的应用程序项目中。谢谢你的视频。我想我可以重新创建它。让我再检查一遍,这超出了我的能力范围。即使我将代码放在我的应用程序上,它对我来说都不起作用iPhone…PS:我甚至在我的iPhone上得到了“Thread 1:EXC_BREAKPOINT(code=1,subcode=0x1937b3e30)”,当我把zIndex放在我的应用程序项目中时(代码基本上是一样的,我只是简化了这里的视图数量和样式),我已经更新了代码。试着使用ad id(UUID())并再次检查UUID中的错误。非常感谢!