Почему SwiftUI не скрывает мою строку состояния в этом полноэкранном режиме?

#swiftui #statusbar

#swiftui #строка состояния

Вопрос:

Мой код приведен ниже. Должно .statusBar(hidden: true) быть в другом месте? Зависит ли это от чего-то, о чем @Environment я не знаю?

 import SwiftUI

struct ContentView: View {
    
    @State private var isShowingFullScreenModal = false
    
    var body: some View {
        Text("Show Modal")
            .font(.title)
            .foregroundColor(.white)
            .frame(width: 180, height: 44)
            .padding()
            .background(Color.blue)
            .cornerRadius(12)
            .onTapGesture {
                isShowingFullScreenModal = true
            }
            .fullScreenCover(isPresented: $isShowingFullScreenModal) {
                Color.green
                    .ignoresSafeArea(.all)
                    .onTapGesture {
                        isShowingFullScreenModal = false
                    }
            }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}


struct GreenCover: View {
    
    @Environment(.presentationMode) var presentationMode
    
    var body: some View {
        
        ZStack {
            Color.green
                .ignoresSafeArea(.all)
            VStack{
                HStack{
                    Spacer()
                    Image(systemName: "xmark.circle.fill")
                }
                Spacer()
            }
        }
        .statusBar(hidden: true)
    }
    
}

 

Ответ №1:

Вот исправленный вариант. Протестировано с Xcode 12.1 / iOS 14.1

 .onTapGesture {
    isShowingFullScreenModal = true
}
.statusBar(hidden: isShowingFullScreenModal)                // << here !!
.fullScreenCover(isPresented: $isShowingFullScreenModal) {
 

Ответ №2:

Иногда в нашем приложении нам нужно скрыть строку состояния, панель навигации и другие элементы и показывать только то содержимое, которое мы хотим отобразить. Чтобы скрыть строку состояния в нашем приложении для iOS с использованием языка swift, нам нужно выполнить очень простые шаги.

Способ 1

В самом вашем info.plist файле добавьте еще один вызываемый ключ Status bar is initially hidden и установите для него значение YES.

С помощью этого метода я заметил, что строка состояния скрывается только при запуске приложения.

Способ 2

Перейдите в файл делегата вашего приложения и добавьте эту строку кода: UIApplication.shared.isStatusBarHidden = true

Это устарело в iOS 13.

Способ 3

Вы также можете добавить эту строку кода, и строка состояния будет скрыта.

 .edgesIgnoringSafeArea(.all)
.statusBar(hidden: true)
 

Комментарии:

1. Я не уверен, что это вообще полезно, если вы хотите ответить на мой вопрос. Это просто общее объяснение. В моем исходном коде есть .statusBar(hidden: true) . Если в соответствии с пунктом 3 вы хотите добавить конкретно .edgesIgnoringSafeArea(.all) , то было бы полезно указать это явно. Или вы имели в виду, что обе строки должны быть добавлены? В таком порядке? Мой код .ignoresSafeArea(.all) находится под Z-стеком. Вы хотите сказать ignores... , что код должен предшествовать status bar hidden... коду? Мне очень жаль, но я вообще не понимаю, как это отвечает на мой вопрос. Не могли бы вы пояснить?