以下是我在实际项目中的一个简化项目,以突出问题。
我有一个项目,我在其中添加了一个带有 UIHostingController 的 SwiftUI 视图,顶部的状态栏是透明的。我在滚动 SwiftUI 视图时看到它。
很容易重新创建,使用故事板创建一个新的 iOS 项目,并ViewController
使用 NavigationView 将其嵌入到故事板中。
然后将ViewController
内容替换为:
import UIKit
import SwiftUI
final class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let hostingController = UIHostingController(rootView: ScrollView { MySwiftUIView() })
self.addChild(hostingController)
view.addSubview(hostingController.view)
hostingController.view.translatesAutoresizingMaskIntoConstraints = false
hostingController.view.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
hostingController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
hostingController.view.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
hostingController.view.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.backgroundColor = UIColor.yellow
self.title = "MyTitle"
}
}
struct MySwiftUIView: View {
var body: some View {
ZStack {
Color.green
ScrollView {
VStack {
ForEach(0...100, id: \.self) { index in
Text("This is line \(index)")
}
}
}
}
}
}
状态栏是透明的,并显示视图的白色背景:
当我开始滚动时MySwiftUIView
,状态栏是透明的就更加明显了:
我四处寻找解决方案,因为我希望状态栏与导航栏具有相同的颜色,并且不在状态栏中显示来自 SwiftUI 视图的内容。但到目前为止,我还没有找到解决方案。