Скрыть строку состояния и панель навигации в MainView, но показать ее в DetailView в Swift

#ios #swift #swiftui

#iOS #swift #swiftui

Вопрос:

Я написал два представления SwiftUI, как показано ниже. Здесь я хочу;

  1. Скрыть строку состояния и панель навигации в mainview
  2. Показать строку состояния и панель навигации в DetailView

Но когда я реализую это, как показано ниже, что-то идет не так.

FirstView.swift

 import SwiftUI

struct FirstView: View {
    var body: some View {
        NavigationView {
            NavigationLink(destination: SecondView()) {
                Text("Main View")
            }
        }
        .edgesIgnoringSafeArea(.all)
        .navigationBarHidden(true)
        .statusBar(hidden: true)
    
    }
}
  

secondView.swift

 import SwiftUI
import UIKit
import WebKit

class SecondViewController: UIViewController, WKUIDelegate {
   var webView: WKWebView!
   override func viewDidLoad() {
      super.viewDidLoad()
      let myURL = URL(string: "https://www.stackoverflow.com")
      let myRequest = URLRequest(url: myURL!)
      webView.load(myRequest)
   }
   override func loadView() {
      let webConfiguration = WKWebViewConfiguration()
      webView = WKWebView(frame: .zero, configuration: webConfiguration)
      webView.uiDelegate = self
      view = webView
   }
}

private struct SecondViewHolder: UIViewControllerRepresentable {

    func makeUIViewController(context: Context) -> SecondViewController {
        return SecondViewController()
    }
    func updateUIViewController(_ uiViewController: SecondViewController, context: Context) {
    }
}

struct SecondView: View {
    var body: some View {
        VStack(spacing: 0) {
            HeaderView()
            SecondViewHolder()
            FooterView()
        }
        .edgesIgnoringSafeArea(.all)
        .navigationBarHidden(false)
        .statusBar(hidden: true)
    }
}

struct HeaderView: View {
    var body: some View {
        Text("Header Note")
            .foregroundColor(.yellow)
            .frame(maxWidth: .infinity, minHeight: 60)
            .background(Color.red)
    }
}

struct FooterView: View {
    var body: some View {
        Text("Footer Note")
            .foregroundColor(.yellow)
            .frame(maxWidth: .infinity, minHeight: 100)
            .background(Color.red)
    }
}
  

Когда я запускаю ее в симуляторе IOS:


Представления выглядят так неправильно. На второй странице я ожидаю панель навигации и заголовок. Но я не смог их увидеть. Я такой новичок в Swift. Не могли бы вы, пожалуйста, помочь мне с этим?

Ответ №1:

Попробуйте следующее

 struct FirstView: View {
    @State private var noBars = true
    var body: some View {
        NavigationView {
            NavigationLink(destination: 
               SecondView()
                 .onAppear { self.noBars = false }
                 .onDisappear { self.noBars = true }
            ) {
                Text("Main View")
            }
        }
        .edgesIgnoringSafeArea(.all)
        .navigationBarHidden(noBars)
        .statusBar(hidden: noBars)
    }
}