我试图显示一个自定义弹出,而在显示时,我需要禁用和黑暗的背景,就像它是在内置警报功能。但是,当视图中有导航条时,颜色层不能放在导航条的顶部。
期望的结果就像在内置警报修饰符中所做的那样,使整个背景变暗(用navbar),同时禁用与背景(和navbar)交互的能力。
是否有一种方法可以实现与内置警报修饰符相同的功能和外观?
示例项目代码
import SwiftUI
struct ContentView: View {
@State private var isShowingPopup = false
var body: some View {
NavigationView {
VStack {
Text("Just a random text")
.padding(.bottom, 100)
Button("Show popup") {
isShowingPopup = true
}
}
.showPopup(isActive: isShowingPopup, action: { isShowingPopup = false })
.navigationBarTitle("Test navbar", displayMode: .inline)
.navigationBarItems(
trailing: Button(
action: { print("profile tapped")},
label: {
Text("Profile")
}
)
)
}
}
}
extension View {
func showPopup(
isActive: Bool,
action: @escaping () -> Void
) -> some View {
ZStack {
self
if isActive {
Color.black
.frame(maxWidth: .infinity, maxHeight: .infinity)
.edgesIgnoringSafeArea(.all)
.opacity(0.51)
.zIndex(1)
Popup(action: action)
.zIndex(2)
}
}
}
}
struct Popup: View {
let action: () -> Void
var body: some View {
VStack {
Text("This is a popup")
.foregroundColor(.black)
.padding()
Button("OK", action: action)
.foregroundColor(.blue)
}
.background(Color.white)
.cornerRadius(8)
}
}谢谢你的帮忙!
发布于 2021-01-25 10:50:41
加上最后一个。将showPopup添加到NavigationView的最后一个
NavigationView {
VStack {
Text("Just a random text")
.padding(.bottom, 100)
Button("Show popup") {
isShowingPopup = true
}
}
.navigationBarTitle("Test navbar", displayMode: .inline)
.navigationBarItems(
trailing: Button(
action: { print("profile tapped")},
label: {
Text("Profile")
}
)
)
}
.showPopup(isActive: isShowingPopup, action: { isShowingPopup = false }) //<---Herehttps://stackoverflow.com/questions/65883129
复制相似问题