SwiftUI , PageViewController 切换明暗模式后所有页面都丢失

问题描述

我是 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
                
                
                
            }
    }
}

从模拟器更改模式(配色方案)后,我滚动但它只有一个视图控制器

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)