【问题标题】:UICollectionViewController Layout-to-Layout Navigation TransitionsUICollectionViewController 布局到布局导航转换
【发布时间】:2013-11-19 12:17:43
【问题描述】:

我正在处理多个UICollectionViewControllers,它们都以不同的布局显示相同的内容。

根据 Apple 的 CollectionViewTransition 示例应用程序和 WWDC 2013 的 Session 218,UICollectionViewController 有一个名为 useLayoutToLayoutNavigationTransitions 的属性,它基本上通过插入 'from' 和 'to' 集合视图的布局来处理导航转换.

假设我有两个 UICollectionViewControllers,分别称为 MasterCollectionViewControllerDetailCollectionViewController。当我从 MasterCollectionViewController 推送 DetailCollectionViewController 时,布局已正确更改,但集合视图仍使用中声明的数据源MasterCollectionViewController.

这对我来说是个问题,因为在每个UICollectionViewControllers 中,我都需要重新排列部分/项目配置。我正在尝试做的一个很好的例子是 iOS 7 上的照片应用程序。这个应用程序的第一个选项卡有三个视图控制器:年、收藏和时刻。这些视图控制器都显示相同的内容:照片。每个视图控制器之间的不同之处在于照片如何按部分分组。部分分组是UICollectionViewDataSource 的责任,这是这里的一个问题。

如果我遇到的useLayoutToLayoutNavigationTransitions 属性的行为是正常行为,有没有办法以不同的方式实现我的目标?

任何帮助或评论将不胜感激。

谢谢!

【问题讨论】:

    标签: ios navigation uicollectionview transitions


    【解决方案1】:

    我看到了相同的行为,并同意它不太理想。

    这里的根本问题是相同的UICollectionView 实例在两个视图控制器之间共享/传递。我尝试尝试更改 UICollectionView 的委托和数据源,但遇到了各种问题。

    最后,我最终采用的解决方案是让主 UICollectionViewController 成为 UINavigationController 的代表,实现:

    – navigationController:willShowViewController:animated:

    ...使用它来切换 controllerMode 属性,然后将 switch 语句添加到 -collectionView:cellForItemAtIndexPath:-collectionView:didSelectItemAtIndexPath: 以在模式下提供所需的行为。我还向-setControllerMode: 添加了代码,以在主视图控制器中进行任何所需的状态更改。

    希望有帮助!

    【讨论】:

    • 您是否尝试过更改与您的 controllerMode 属性相对应的部分数和每个部分的项目数?
    • 在-setControllerMode:中,我使用了[UICollectionView performBatchUpdates:]来更新item和section的数量。我很感激!
    • 是的,在我的应用程序中,两种模式下的部分数量不同,尽管我使用更核的-[UICollectionView reloadData] 来强制完全更新。
    • 当使用 -[UICollectionView reloadData] 时,您是否能够为布局更改设置动画?你在哪个地方调用-[UICollectionView reloadData]?在 -setControllerMode: 中调用此方法时,我得到一个异常,指出 CollectionView 的节数无效,这是由于 UICollectionViewDataSource 中作为多个节数返回的不同数字造成的。
    • 如果使用-[UICollectionView reloadData],我认为您无法制作动画 - 由于视图和模型之间的解耦,UICollectionView 无法知道哪些单元格是新的,哪些是旧的。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    相关资源
    最近更新 更多