首页 > 解决方案 > 实现 UIPageViewController 的问题

问题描述

我正在尝试实现在两个视图控制器之间滚动,一个是消息页面,另一个视图控制器是相机页面,类似于 snapchat 应用程序。如果我没有让自己理解,我在应用程序中附加了一个图像,该应用程序的实现与我尝试做的完全相同,它有 5 个视图,您可以在它们之间滚动。image 现在我已经尝试以多种方式实现它。其中之一是 UIPageViewController,我的代码片段:

   class ViewController:  UIViewController , UIPageViewControllerDelegate
  {


var chatVC = one()
var cameraVC= two()
var array  = [UIViewController]()
var arr = [UIViewController]()


override func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = .white
    self.array = [chatVC,cameraVC]
    self.arr = [chatVC]
  
    
    DispatchQueue.main.asyncAfter(deadline: .now() + 1, execute: {
        self.presentPageVC()
        
    })
   
        
    
  
    
    
    
}

func presentPageVC(){
    var vc = UIPageViewController.init(transitionStyle: .scroll, navigationOrientation: .horizontal , options: nil)
    vc.delegate = self
    vc.dataSource = self
    vc.setViewControllers(self.arr, direction: .forward, animated: true, completion: nil)
    self.present(vc, animated: true, completion: nil)

}











func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
    guard let index = self.array.firstIndex(of: viewController),index>0 else {return nil}
     
    let beforeIndex = index - 1
    
    
    return self.array[beforeIndex]
}

func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
    guard let index = self.array.firstIndex(of: viewController), index < (self.array.count-1) else {
        return nil
    }
    var indexAfter = index + 1
    
    return self.array[indexAfter]
    
}

有了这个实现,当我尝试在 cameraVC 的最后一页之后滚动时,我遇到了一个问题,在右侧它出现了它后面的视图。当之后或之前没有其他页面时,我怎么能关闭滚动。同样,我是软件开发的新手,如果有人对实现它有更好的想法,请告诉我。我一直在尝试使用 UICollectionView 实现,因为我不知道如何将 UIViewController 转换为单元格,以及如何根据委托进行更改。同样在尝试通过 UIScrollView 添加时,我不明白如何将 UIViewController 子视图添加到 UIScrollview,因为它只接受 UIView。预先感谢您的帮助,

标签: swift

解决方案


对于任何希望 UIScrollView 在滚动时不显示 viewUnder 的人来说,没有可滚动的现有视图。

scrollView.showsLargeContentViewer = false

推荐阅读