问题描述
我是 SwiftUI 的新手 我创建了简单的演示,像 Instagram 一样带有 3 个页面视图控制器(相机、主视图、聊天视图)
工作正常,但是当我切换到暗模式或亮模式时,所有页面视图控制器都丢失了
struct CustomPageViewController:UIViewControllerRepresentable {
var controllers : [UIViewController]
let screenFrame = UIScreen.main.bounds
@Binding var currentSelectedindex:Int
@State private var prevIndex = 0
func makeUIViewController(context: Context) -> UIPageViewController {
let pageVC = UIPageViewController(transitionStyle: .scroll,navigationorientation: .horizontal,options: nil)
pageVC.dataSource = context.coordinator
pageVC.delegate = context.coordinator
pageVC.setViewControllers([controllers[currentSelectedindex]],direction: .forward,animated: true,completion: nil)
return pageVC
}
func updateUIViewController(_ uiViewController: UIPageViewController,context: Context) {
print("currentSelectedindex",currentSelectedindex)
if let visibleViewController = uiViewController.viewControllers?.first,let index = controllers.firstIndex(of: visibleViewController) {
uiViewController.setViewControllers([controllers[currentSelectedindex]],direction: index < currentSelectedindex ? .forward : .reverse,completion: nil)
} else {
uiViewController.setViewControllers([controllers[currentSelectedindex]],animated: false,completion: nil)
}
// prevIndex = currentSelectedindex
}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
class Coordinator:NSObject,UIPageViewControllerDelegate,UIPageViewControllerDataSource {
var parent:CustomPageViewController
init(_ pageViewController:CustomPageViewController) {
self.parent = pageViewController
}
func pageViewController(_ pageViewController: UIPageViewController,viewControllerBefore viewController: UIViewController) -> UIViewController? {
guard let index = parent.controllers.firstIndex(of: viewController) else {
return nil
}
if index == 0 {
return nil
}
return parent.controllers[index - 1]
}
func pageViewController(_ pageViewController: UIPageViewController,viewControllerAfter viewController: UIViewController) -> UIViewController? {
guard let index = parent.controllers.firstIndex(of: viewController) else {
return nil
}
if index + 1 == parent.controllers.count {
return nil
}
return parent.controllers[index + 1]
}
func pageViewController(_ pageViewController: UIPageViewController,didFinishAnimating finished: Bool,prevIoUsViewControllers: [UIViewController],transitionCompleted completed: Bool) {
if completed,let visibleViewController = pageViewController.viewControllers?.first,let index = parent.controllers.firstIndex(of: visibleViewController)
{
parent.currentSelectedindex = index
}
}
}
}
和主视图
struct ContentView: View {
@Environment(\.colorScheme) var colorScheme
@State private var tabSelected = 0
var body: some View {
CustomPageViewController(controllers:
[
UIHostingController(rootView: Text("Camera")),UIHostingController(rootView: Text("MAIN").padding(.top,0).padding(.bottom,0)),UIHostingController(rootView: Text("CHAT"))
],currentSelectedindex: $tabSelected)
.edgesIgnoringSafeArea(.all)
.onAppear{
self.tabSelected = 1
}
}
}
从模拟器更改模式(配色方案)后,我滚动但它只有一个视图控制器
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)