我正在使用一个基于SwiftUI的应用程序,该应用程序依赖于NavigationView
从屏幕转换。
我需要在导航栏上设置背景颜色,并且找到了大部分时间都可以使用的代码。
当应用程序以纵向模式启动时,一切都在旋转中正常工作。
但是,当应用程序以横向模式启动时,条形图默认为灰色,并且仅在第一次旋转后更新。
下面,我有最少的代码来重新创建我的问题:
import SwiftUI
struct ContentView: View {
var body: some View {
return NavigationView {
List {
NavigationLink(destination: Text("A")) {
Text("See A")
}
}
.background(NavigationConfigurator { navigationConfigurator in
navigationConfigurator.navigationBar.barTintColor = .orange
})
.navigationBarTitle(Text(verbatim: "Home"), displayMode: .inline)
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
struct NavigationConfigurator: UIViewControllerRepresentable {
var configure: (UINavigationController) -> Void = { _ in }
func makeUIViewController(context: UIViewControllerRepresentableContext<NavigationConfigurator>) -> UIViewController {
UIViewController()
}
func updateUIViewController(_ uiViewController: UIViewController,
context: UIViewControllerRepresentableContext<NavigationConfigurator>) {
if let navigationController = uiViewController.navigationController {
self.configure(navigationController)
print("Successfully obtained navigation controller")
} else {
print("Failed to obtain navigation controller")
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
以纵向模式启动时应用程序的显示方式:
...并旋转到横向...
最后,以横向模式启动时的外观。
我还注销了NavigationConfigurator
,发现当它以纵向模式启动时,会拨打两个电话。第一个找不到导航控制器,但第二个找到了。
当我以横向模式启动时,只进行了一次调用,但未能找到它。旋转后,它会找到它并成功更新颜色。
我确实尝试通过@State
管理强制重绘,但没有成功。
由于没有将应用程序锁定为纵向模式,我已经没有想法了。