ios - UICollectionViewController 布局到布局的导航转换

标签 ios navigation uicollectionview transitions

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

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

假设我有两个 UICollectionViewControllers,名为 MasterCollectionViewControllerDetailCollectionViewController。当我从 MasterCollectionViewController 推送 DetailCollectionViewController 时,布局已正确更改,但 Collection View 仍使用在中声明的数据源MasterCollectionViewController

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

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

如有任何帮助或评论,我们将不胜感激。

谢谢!

最佳答案

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

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

最后,我最终采用的解决方案是让master UICollectionViewController成为UINavigationController的委托(delegate),实现:

– navigationController:willShowViewController:animated:

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

希望对您有所帮助!

关于ios - UICollectionViewController 布局到布局的导航转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19842952/

相关文章:

ios - 更快地重新连接 CBPeripheral

ios - 如何在 Xcode 中为 UIView 的宽度和高度设置动画?

flutter - 如何在 Flutter 中重新加载 Navigation.pop 上的页面?

ios - 重新启动应用程序后,如何在 Collection View 中保存重新排序的单元格的位置? swift

ios - 如何在 TableViewController 中使用 indexPathForItemAtPoint?

ios - 滚动越过边界时 iOS 上的抖动

javascript - 如何制作顶部带有 Logo 标题的网格?

navigation - 如何将具有多个值的非二进制占用网格映射到 ROS 中的成本图?

html - 导航栏 - 如果事件 URL 突出显示背景?

ios - CollectionViewCell 中的约束动画问题