Animation SwiftUI-按钮不可用';在视图的左上角不工作

Animation SwiftUI-按钮不可用';在视图的左上角不工作,animation,button,menu,swiftui,geometryreader,Animation,Button,Menu,Swiftui,Geometryreader,我是SwiftUI的新手,我对我的“汉堡包”菜单有意见 基本上,我已经为主页创建了两个视图:主页视图和主页菜单视图 我的主要目标是将“汉堡包”按钮放在视图的左上角,并在单击时打开侧菜单。 但是,当我使用.edgesIgnoringSafeArea(.top)并将“汉堡包”按钮放在视图的左上角时,该按钮不会打开菜单。 如果不是,我不添加.EdgEsSimulink安全区域(.top),按钮显示在视图的中间,并在单击时正确打开菜单。 你能帮我看看我做错了什么吗 提前谢谢 主视图: import Sw

我是SwiftUI的新手,我对我的“汉堡包”菜单有意见

基本上,我已经为主页创建了两个视图:主页视图和主页菜单视图

我的主要目标是将“汉堡包”按钮放在视图的左上角,并在单击时打开侧菜单。 但是,当我使用.edgesIgnoringSafeArea(.top)并将“汉堡包”按钮放在视图的左上角时,该按钮不会打开菜单。 如果不是,我不添加.EdgEsSimulink安全区域(.top),按钮显示在视图的中间,并在单击时正确打开菜单。

你能帮我看看我做错了什么吗

提前谢谢

主视图

import SwiftUI
    struct HomeView: View {      
       var body: some View {
           NavigationView{
              ScrollView{
                VStack(alignment: .center) {
                    Text("Home")
                        .font(.system(size: 22))
                        .fontWeight(.bold)
                        .foregroundColor(.white)
                        .padding(.top, 20)
                        .padding(.bottom, 20)

                }
                .frame(width: UIScreen.main.bounds.width, height: 80)
                .background(Color.blue)

                Image("image")
                    .resizable()
                    .aspectRatio(contentMode: .fit)
                    .edgesIgnoringSafeArea(.all)
             }
             .edgesIgnoringSafeArea(.top)
         }
         .navigationBarBackButtonHidden(true)
    }
}
import SwiftUI

struct HomeSideMenuView : View {

@State var showMenu = false

var body: some View {

    let drag = DragGesture()
        .onEnded {
            if $0.translation.width < -100 {
                withAnimation {
                    self.showMenu = false
                }
            }
    }

    return NavigationView {
        GeometryReader { geometry in
            ZStack(alignment: .leading) {
                VStack {

                      HomeView()
                        .overlay(
                            Button (action:{
                               withAnimation {
                                   self.showMenu = true
                               }
                            }){
                               Image(systemName: "line.horizontal.3")
                                   .padding()
                                   .imageScale(.large)
                                   .font(Font.system(size: 20, weight: .bold))
                           }
                           .padding()
                           .foregroundColor(.white)
                           .shadow(color: Color.gray, radius: 0.2, x: 1, y: 1)
                           .frame(maxWidth: geometry.size.width, maxHeight: geometry.size.height, alignment: .topLeading)
                           .edgesIgnoringSafeArea(.top) // -> if I add this line, the button doesn't work
                        )       
                    }
                    .frame(width: geometry.size.width, height: geometry.size.height)
                    .offset(x: self.showMenu ? geometry.size.width/1.5 : 0)
                    .disabled(self.showMenu ? true : false)

                    if self.showMenu {
                        MenuView()
                            .frame(width: geometry.size.width/1.5, height: geometry.size.height)
                            .transition(.move(edge: .leading))
                    }
                }
                .gesture(drag)

        }
    }
    .navigationBarBackButtonHidden(true)

}
}
主页面菜单视图

import SwiftUI
    struct HomeView: View {      
       var body: some View {
           NavigationView{
              ScrollView{
                VStack(alignment: .center) {
                    Text("Home")
                        .font(.system(size: 22))
                        .fontWeight(.bold)
                        .foregroundColor(.white)
                        .padding(.top, 20)
                        .padding(.bottom, 20)

                }
                .frame(width: UIScreen.main.bounds.width, height: 80)
                .background(Color.blue)

                Image("image")
                    .resizable()
                    .aspectRatio(contentMode: .fit)
                    .edgesIgnoringSafeArea(.all)
             }
             .edgesIgnoringSafeArea(.top)
         }
         .navigationBarBackButtonHidden(true)
    }
}
import SwiftUI

struct HomeSideMenuView : View {

@State var showMenu = false

var body: some View {

    let drag = DragGesture()
        .onEnded {
            if $0.translation.width < -100 {
                withAnimation {
                    self.showMenu = false
                }
            }
    }

    return NavigationView {
        GeometryReader { geometry in
            ZStack(alignment: .leading) {
                VStack {

                      HomeView()
                        .overlay(
                            Button (action:{
                               withAnimation {
                                   self.showMenu = true
                               }
                            }){
                               Image(systemName: "line.horizontal.3")
                                   .padding()
                                   .imageScale(.large)
                                   .font(Font.system(size: 20, weight: .bold))
                           }
                           .padding()
                           .foregroundColor(.white)
                           .shadow(color: Color.gray, radius: 0.2, x: 1, y: 1)
                           .frame(maxWidth: geometry.size.width, maxHeight: geometry.size.height, alignment: .topLeading)
                           .edgesIgnoringSafeArea(.top) // -> if I add this line, the button doesn't work
                        )       
                    }
                    .frame(width: geometry.size.width, height: geometry.size.height)
                    .offset(x: self.showMenu ? geometry.size.width/1.5 : 0)
                    .disabled(self.showMenu ? true : false)

                    if self.showMenu {
                        MenuView()
                            .frame(width: geometry.size.width/1.5, height: geometry.size.height)
                            .transition(.move(edge: .leading))
                    }
                }
                .gesture(drag)

        }
    }
    .navigationBarBackButtonHidden(true)

}
}
导入快捷界面
结构HomeSideMenuView:视图{
@状态变量showMenu=false
var body:一些观点{
让drag=DragGesture()
.ONENED{
如果$0.5,则宽度<-100{
动画片{
self.showMenu=false
}
}
}
返回导航视图{
GeometryReader{中的几何体
ZStack(对齐:。引导){
VStack{
HomeView()
.覆盖(
按钮(操作:{
动画片{
self.showMenu=true
}
}){
图像(系统名称:“line.horizontal.3”)
.padding()
.imageScale(.large)
.font(字体系统(大小:20,重量:粗体))
}
.padding()
.foregroundColor(.白色)
.阴影(颜色:颜色.灰色,半径:0.2,x:1,y:1)
.frame(maxWidth:geometry.size.width,maxHeight:geometry.size.height,对齐:.topLeading)
.edgesIgnoringSafeArea(.top)/->如果我添加此行,按钮将不起作用
)       
}
.框架(宽度:几何体.尺寸.宽度,高度:几何体.尺寸.高度)
.offset(x:self.showMenu?几何体、大小、宽度/1.5:0)
.禁用(self.showMenu?真:假)
如果self.showMenu{
MenuView()
.框架(宽度:几何体。尺寸。宽度/1.5,高度:几何体。尺寸。高度)
.transition(.move(边:。前导))
}
}
.手势(拖动)
}
}
.navigationBarBackButtonHidden(真)
}
}

我也有同样的问题,我想第一个排名前100位的像素是保留给导航栏的,只需添加

.navigationBarTitle("")
.navigationBarHidden(true)
到视图容器(NavigationView的第一个子级)。 希望这有帮助