我想创建一个弹出菜单,如this
,它具有清晰的全屏覆盖,触摸覆盖时,弹出菜单将消失。
我尝试将覆盖添加到根视图,并向其添加菜单列表视图,对其进行硬编码位置和框架,与navigationItem对齐,然后创建一个EnvironmentObject来存储覆盖的切换。 在此之后,我达到了目标,但我认为这是机械的,所以我的问题是,有没有很好的方法来做到这一点?就像只使用视图修饰符,还是步长较少的修饰符?
这是我的根视图:
struct Root : View {
TabbedView {
NavigationView {
HomePage()
}
}.overlay(...) <-- add a overlay at root view.
}
struct HomePage : View {
var body: some View {
ZStack {
List {...}
}
.navigationBarTitle("Home")
.navigationBarItems(trailing:
Button(action: {
// show popup menu
}) {
Image(systemName: "plus.circle")
}
)
}
}