Ios UICollectionViewController布局到布局导航转换

Ios UICollectionViewController布局到布局导航转换,ios,navigation,uicollectionview,transitions,Ios,Navigation,Uicollectionview,Transitions,我正在处理多个UICollectionViewControllers,它们都以不同的布局显示相同的内容 根据苹果公司的CollectionViewTransition示例应用程序和WWDC 2013的第218次会议,UICollectionViewController有一个名为UseLayoutNavigationTransitions的属性,它基本上通过插入“从”和“到”集合视图的布局来处理导航转换 假设我有两个uicollectionviewcontroller名为MasterCollect

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

根据苹果公司的CollectionViewTransition示例应用程序和WWDC 2013的第218次会议,
UICollectionViewController
有一个名为
UseLayoutNavigationTransitions
的属性,它基本上通过插入“从”和“到”集合视图的布局来处理导航转换

假设我有两个
uicollectionviewcontroller
名为MasterCollectionViewControllerDetailCollectionViewController。当我从MasterCollectionViewControllerDetailCollectionViewController时,布局已正确更改,但集合视图仍使用MasterCollectionViewController中声明的数据源

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

如果我遇到的
useLayoutToLayoutNavigationTransitions
属性的行为是正常行为,有没有其他方法可以实现我的目标

如有任何帮助或意见,将不胜感激


谢谢

我看到了同样的行为,并同意这不太理想

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

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

–navigationController:willShowViewController:animated:

…使用此选项切换
控制器模式
属性,然后将开关语句添加到
-collectionView:cellForItemAtIndexPath:
-collectionView:didSelectItemAtIndexPath:
,以提供模式中所需的行为。我还向
-setControllerMode:
添加了代码,以便在主视图控制器中执行任何必需的状态更改


希望有帮助

您是否尝试过更改与controllerMode属性相对应的节数和每个节的项目数?在-setControllerMode:,我使用[UICollectionView PerformButUpdate:]更新了项目和节数。我很感激!是的,在我的应用程序中,两种模式下的节数不同,尽管我使用了更核心的
-[UICollectionView reloadData]
来强制进行完全更新。使用-[UICollectionView reloadData]时,您是否能够设置布局更改的动画?您在哪个位置调用-[UICollectionView重载数据]?在-setControllerMode:中调用此方法时,我得到一个异常,该异常表明CollectionView的节数无效,这是由UICollectionViewDataSource中作为节数返回的不同数字引起的。如果使用
-[UICollectionView reloadData],我认为您无法设置动画
-由于视图和模型之间的解耦,UICollectionView无法知道哪些单元格是新的,哪些是旧的。