问题描述
我正在创建嵌入在ZStack中的视图,如下所示:
ZStack(alignment: .top) {
content
if self.show {
vstack {
HStack {
这是一个viewModifier,因此我在主视图中使用例如.showView()
来调用它。
但是发生的是,如果我有NavigationView,则此视图仅显示在navigationView下方。 (我的视图上有一个NavigationViewTitle)。
如何解决此问题?我在考虑一些zIndex,但是它不起作用。我还考虑过该.showView()的更好放置,但无关紧要。
解决方法
这里是一种可能方法的演示(可以添加动画/过渡,但没有主题)。使用Xcode 11.4 / iOS 13.4编写并测试的演示
struct ShowViewModifier<Cover: View>: ViewModifier {
let show: Bool
let cover: () -> Cover
func body(content: Content) -> some View {
ZStack(alignment: .top) {
content
if self.show {
cover()
}
}
}
}
struct DemoView: View {
@State private var isPresented = false
var body: some View {
NavigationView {
VStack {
NavigationLink("Link",destination: Button("Details")
{ self.isPresented.toggle() })
Text("Some content")
.navigationBarTitle("Demo")
Button("Toggle") { self.isPresented.toggle() }
}
}
.modifier(ShowViewModifier(show: isPresented) {
Rectangle().fill(Color.red)
.frame(height: 200)
})
}
}