【问题标题】:UIPageViewController along with UICollectionView for cell grid structure用于单元格网格结构的 UIPageViewController 和 UICollectionView
【发布时间】:2016-12-05 10:59:37
【问题描述】:

我有一个UICollectionView,它使用UICollectionViewFlowLayout 在集合视图中排列我的单元格。

在我的单元格中,我有一个图像和一个标签。使用上述布局,我可以设计带有垂直滚动的收藏视图,

但我想要一个像UIPageViewController 这样的结构,而不是垂直滚动,它将包含我的UICollectionView 和上述单元格。

我试过flowLayout.scrollDirection = .horizontal, 但是用这种方法我无法解决我的问题。

我是 Swift 新手,我没有使用故事板。

【问题讨论】:

    标签: ios uicollectionview swift3 uipageviewcontroller uicollectionviewlayout


    【解决方案1】:

    打开你的故事板,选择collectionView并将滚动方向从垂直更改为水平,如下所示:)

    现在您的 collectionView 将开始水平滚动而不是垂直滚动 :)

    如果你想要分页,比如 pageViewController 中的 ViewControllers,选择 collectionView 并选中启用分页复选框:)

    现在,如果您希望您的集合视图单元格像 UIPageViewController 中的视图控制器一样覆盖整个 collectionView,请在您的 UICollectionView 委托中输入:)

    extension YourViewController : UICollectionViewDelegateFlowLayout {
        func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
            return self.pageViewController.frame.size
        }
    
        func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
            return 0.0
        }
    
        func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
            return 0.0
        }
    }
    

    希望在上述方法中在单元格返回值之间留出间距而不是 0.0 :) 就是这样

    编辑

    如果您没有情节提要,您可以使用编程方式设置滚动方向和其他属性

    (self.collectionView.collectionViewLayout as! UICollectionViewFlowLayout).scrollDirection = .horizontal
    

    【讨论】:

    • 我没有在我的项目中使用故事板。而且,我的 UICollectionView 每页包含超过 1 个单元格。例如:如果我的整个数组大小为 15,基于屏幕大小,如果第一页包含 9 个项目,那么其余 6 个将在第二页上水平滚动。
    • @chittaranjan-sahoo :你能试试我更新的答案吗??
    • 我已经尝试过 (self.collectionView.collectionViewLayout as!UICollectionViewFlowLayout).scrollDirection = .horizo​​ntal 但是,它是按垂直顺序排列我的单元格,即如果我的数组中只有 3 个项目,然后不是将 3 个项目放在一行中,而是将项目安排在 3 行 1 列中。
    • @chittaranjan-sahoo :刚刚尝试了代码。它工作正常,我可以知道你在哪里设置滚动方向??
    • 我在我的集​​合视图的 viewDidLoad() 中添加了这一行: if let flowlayout = collectionView?.collectionViewLayout as? UICollectionViewFlowLayout { flowlayout.scrollDirection = .horizo​​ntal }
    【解决方案2】:

    我从以下链接中找到了答案: http://swiftiostutorials.com/ios-tutorial-using-uipageviewcontroller-create-content-slider-objective-cswift/

    这对我帮助很大。谢谢。

    【讨论】:

    • 此链接已失效
    • 下次请发布完整的答案,这样我们就不会依赖正在维护的链接
    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多