通过 navigationView、SwiftUI 创建一个视图
Create a view over navigationView, SwiftUI
我正在创建一个嵌入 ZStack 的视图,如下所示:
ZStack(alignment: .top) {
content
if self.show {
VStack {
HStack {
这是一个 viewModifier,所以我在主视图中调用它,例如:.showView()
.
但是如果我有一个 NavigationView,这个视图只会显示在 navigationView 下面。 (我的视图上方有一个 navigationViewTitle)。
我该如何解决这个问题?我在考虑一些 zIndex 但它不起作用。我也考虑过这个 .showView() 的一些更好的放置,但无能为力。
这里有一个可能的方法演示(可以添加animations/transitions,但不在主题之列)。使用 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)
})
}
}
我正在创建一个嵌入 ZStack 的视图,如下所示:
ZStack(alignment: .top) {
content
if self.show {
VStack {
HStack {
这是一个 viewModifier,所以我在主视图中调用它,例如:.showView()
.
但是如果我有一个 NavigationView,这个视图只会显示在 navigationView 下面。 (我的视图上方有一个 navigationViewTitle)。
我该如何解决这个问题?我在考虑一些 zIndex 但它不起作用。我也考虑过这个 .showView() 的一些更好的放置,但无能为力。
这里有一个可能的方法演示(可以添加animations/transitions,但不在主题之列)。使用 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)
})
}
}