#ios #swift #swiftui
#iOS #swift #swiftui
Вопрос:
Я написал два представления SwiftUI, как показано ниже. Здесь я хочу;
- Скрыть строку состояния и панель навигации в mainview
- Показать строку состояния и панель навигации в 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)
}
}