swift - 实现 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。预先感谢您的帮助,
解决方案
对于任何希望 UIScrollView 在滚动时不显示 viewUnder 的人来说,没有可滚动的现有视图。
scrollView.showsLargeContentViewer = false
推荐阅读
- javascript - 反应错误:events.js:177 .throw er; // 新创建反应应用程序后未处理的“错误”事件
- amazon-web-services - 有没有办法使用 IAM 策略来限制 S3 存储桶的创建?
- javascript - Angularjs - 如何动态更改 url 参数
- opengl - Open GL Shaders "reused'
- node.js - 任务模块的 Javascript 示例?
- flutter - Cloud Firestore:使用嵌套元素引用获取集合的最佳方式
- ruby-on-rails - Rails 项目未在测试环境中加载 CSS,导致 circleCI 测试出现问题
- r - 创建是/否响应表的有效方法
- database - 更新数据库变量时,Google Cloud SQL 返回“更新失败:发生未知错误”
- azure - 是否有使用 Azure 文件同步来同步共享文件的共享限制的解决方案?