ios - 在视图控制器的 SwiftUI 视图中从视图控制器更改状态栏颜色
问题描述
我在一些 UIKit 代码之间有一些 SwiftUI,可以很好地UIHostingController
在一端和UIViewControllerRepresentable
另一端启动东西,但我想控制状态栏颜色而不更改视图控制器,他们不应该知道是什么启动了它们.
视图控制器像往常一样使用preferredStatusBarStyle
和。setNeedsStatusBarAppearanceUpdate
我们不在应用程序中使用暗模式,因此该模式已被禁用。
我有一个子类UIHostingController
,我可以使用它来设置 SwiftUI 代码的状态栏颜色referredStatusBarStyle
等。
public class ContentHostingController: UIHostingController<MySwiftUIView> {
private var currentStatusBarStyle: UIStatusBarStyle = .default
public override var preferredStatusBarStyle: UIStatusBarStyle {
currentStatusBarStyle
}
public func setStatusBarStyle(_ style: UIStatusBarStyle) {
self.currentStatusBarStyle = style
self.setNeedsStatusBarAppearanceUpdate()
}
}
但是对于通过UIViewControllerRepresentable
SwiftUI 呈现的视图控制器,我不确定使用preferredStatusBarStyle
and的好方法setNeedsStatusBarAppearanceUpdate
。
在 SwiftUI 中使用视图声明式向下(向上?)堆栈并抓取它是很棘手的,preferredStatusBarStyle
但它应该是可能的。
但是当视图控制器调用它时触发setNeedsStatusBarAppearanceUpdate
,ContentHostingController
是否应该被调配?
我不想向视图控制器添加通知,因为我希望能够在不考虑启动它们的框架的情况下构建它们。
这是一种层次结构
UIViewController (root)
ContentHostingController (UIHostingController subclass)
MySwiftUIView
UIViewControllerRepresentable
UIViewController (child)
解决方案
推荐阅读
- c# - 这个“工具”是什么以及如何禁用它?
- html - 在常规表格中,有没有办法在表格上放置外边框并省略表格标题?
- php - 登录后如何将一个opencart站点的用户重定向到另一个opencart站点?
- vb.net - 将 VBA SAPGUI 代码转换为 VB.NET 时遇到问题,找不到正确的导入库
- python - 尝试将输入字符串转换为浮点数时引发意外异常
- mongodb - 带有sails await 函数的多个聚合函数不会返回结果值
- mapbox-gl-js - 有没有办法动态设置地图弹出的高度?
- reactjs - 身份验证失败时重定向到登录
- javascript - 在代码沙箱内路由,由于 withRouter 而失败
- android - 无需将它们置于前台的应用程序间通信的最佳方法?