SwifUI LandScape NavigationTopBar не скроет

Мне нужен был только один пейзажный вид между всеми видами, поэтому я добавил код ниже в AppDelegate

       func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: 
UIWindow?) -> UIInterfaceOrientationMask {
    return AppDelegate.orientationLock
}

и я создал настраиваемый модификатор, как показано ниже, чтобы заставить конкретный вид быть в ландшафтном режиме

           struct LandScapeOrientation: ViewModifier {
    
        func body(content: Content) -> some View {
            content
                .onAppear {
                    AppDelegate.orientationLock = UIInterfaceOrientationMask.landscapeLeft
                    UIDevice.current.setValue(UIInterfaceOrientation.landscapeLeft.rawValue, forKey: "orientation")
                    UINavigationController.attemptRotationToDeviceOrientation()
                 }
                .onDisappear {
                    DispatchQueue.main.async {
                    AppDelegate.orientationLock = UIInterfaceOrientationMask.portrait
                    UIDevice.current.setValue(UIInterfaceOrientation.portrait.rawValue, forKey: "orientation")
                    UINavigationController.attemptRotationToDeviceOrientation()
                }
            }
    }}

    extension View {
    func landScape() -> some View{
        self.modifier(LandScapeOrientation())
    }
}

и вид, который я создал, выглядит как показано ниже:

       struct GameplayScene: View {

//MARK: - Var
@State var round = NeverMindRound.first
@Binding var mode: NevermindMode
//MARK: - Views
private var background: some View {
    colors.customYellowOk.value
        .edgesIgnoringSafeArea(.all)
}
//MARK: - MainBody
var body: some View {
    
   return ZStack{
    
    background
        
    RoundIntro(round: $round)
            .landScape()
    .navigationBarHidden(true)
    .navigationBarBackButtonHidden(true)
    .statusBar(hidden: true)
    }.navigationBarHidden(true)
    .navigationBarBackButtonHidden(true)
    .statusBar(hidden: true)

}}

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

и вот вид rounIntro, который GamePlay представляет

             struct RoundIntro: View {
    
    
    //MARK: - Vars
    @Binding var round: NeverMindRound
   
    
    //MARK: - View
    private var roundTitle: some View {
        var shadow     = colors.round1TitleShadow.value
        var roundTitle = "Round 1"
        switch round {
            case .first:
                roundTitle = "Round 1"
                shadow     = colors.round1TitleShadow.value
            case .second:
                roundTitle = "Round 2"
                shadow     = colors.round2TitleShadow.value
            case .third:
                roundTitle = "Round 3"
                shadow     = colors.round3TitleShadow.value
        }
        return Text(roundTitle)
                .font(rubik.black.with(Size: 118))
                .foregroundColor(.white)
                .shadow(color: shadow, radius: 6, x: -7, y: 7)
    }
    
    //MARK: - MainBody
    var body: some View {
        roundTitle
        .landScape()
    }
    
    
}

и еще одна вещь - после нажатия кнопки возврата на панели навигации это не приведет к возврату изображения в портретный режим. вот картинки из ситуации:

1 ответ

Вы установили панель навигации для

struct RoundIntro: View {

Но что вы должны установить свойство hidden = true для соответствующей панели навигации UIViewController

Другие вопросы по тегам