SwiftUI - кнопка не работает в левом верхнем углу представления - PullRequest
0 голосов
/ 26 марта 2020

Я новичок в SwiftUI, и у меня проблема с моим меню "гамбургер".

В основном я создал 2 вида для домашней страницы: домашний вид и вид домашнего меню.

Моя главная цель - поместить кнопку "гамбургер" в левом верхнем углу экрана и откройте боковое меню при нажатии. Однако, когда я использую .edgesIgnoringSafeArea (.top) и помещаю кнопку «гамбургер» в верхнем левом углу представления, кнопка не открывает меню. Если вместо этого я не добавлю .edgesIgnoringSafeArea (.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)

}
}

1 Ответ

0 голосов
/ 20 апреля 2020

У меня та же проблема, я думаю, первые 100 пикселей зарезервированы для панели навигации, просто добавьте

.navigationBarTitle("")
.navigationBarHidden(true)

в контейнеры представлений (первый дочерний элемент NavigationView). Надеюсь, это поможет

...