UICollectionView看起来像iOS日历应用程序的最佳方法

我正在构build一个应用程序,我真的需要显示一个像在iOS日历应用程序中看到的列表。 我需要创build一个collectionView,我可以有足够的细胞来覆盖他们各自的小时,像这样:

在这里输入图像说明

我尝试了各种各样的东西,包括Github上的这个项目 ,我不知道如何在另一个项目中使用它

除了这个项目,我还用UITableViewController快速地创build了不同的方法:

在这里输入图像说明

但是我并没有真正想到我想要的地方。 我需要在第一张照片上看到devise,并想知道是否有人可以指出我正确的方向来实现这一目标?

非常感谢你的帮助!

更新:

实际的单元格框架不应该代表一个小时的开始,在这个例子中是10:00? (而不是定制的分隔符)

在这里输入图像说明

更新

为什么层次结构如下所示:

在这里输入图像说明

这种定位似乎是“阻止”单元格的触摸, didSelectItemAtIndexPath方法不会被调用。 这适用于比其他单元格更靠后的单元格。

在这里输入图像说明

您应该确实使用UICollectionView和自定义布局。 只需提供supplementary views来build立基本的每日时间表(每小时一个视图),然后使用这些cells来放置事件。

UICollectionViewLayout ,你需要实现几个方法:

  • collectionViewContentSize应该返回一个高度,等于小时数(24)乘以补充视图的高度,代表一小时。
  • prepareLayout几乎可以做任何事情。 在这种方法中,您将计算您需要使用的每个layoutAttributes 。 通过获取事件的时间和持续时间,您可以计算每个事件的帧。 补充视图帧(每个“小时”块)也非常简单,因为它们的高度是固定的(origin.y =固定的高度乘以小时)。
  • layoutAttributesForElementsInRect:只遍历你以前准备好的layoutAttributes,并返回所有的帧与提供的帧相交。
  • layoutAttributesForItemAtIndexPath:查找并返回与提供的indexPath匹配的单元格的layout属性。

  • layoutAttributesForSupplementaryViewOfKind:atIndexPath查找并返回math提供的indexPath的补充视图的layoutAttributes。

接下来,您将该布局的一个实例提供给一个集合视图:

 self.collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:myCustomLayout] 

然后,您只需通过UICollectionView的委托和数据源为补充视图(即时间​​块)和单元格提供所需的视图。 如果您需要使用UIViewController来提供标准委托/数据源的更多信息,请随意在自定义布局中创build自定义委托!

注意:由于表示小时开始的行比单元格顶部边界低几个像素,因此需要将每次事件移动相同数量的像素。 假设每行上面有6个像素,每个小时块的高度为60个像素,那么如果在凌晨2点开始平均,那么您将设置其origin.y = 2 * 60 + 6 (每小时2小时* 60像素+6像素填充)。 你还需要调整你的最后一个单元格块为6像素高,因为它不会有另一个单元格下面。

我build议你阅读有关创build自定义布局的官方文档 。

为了帮助您:我做了一个快速的示例项目,因为您自己的布局有时会很麻烦。 去检查CalendarViewLayout类,我添加了一些注释来解释我如何处理填充。 这是这样的:

样品

我不认为这是很难做到的。

你只是需要一个不同的视angular,而不是你所尝试的。

使所有CollectionView单元格的大小相同。 他们代表1小时,所以他们应该有相同的大小。

然后在每个单元格中有另一个视图。 这是表明有事件的那个。 这个视图会给出一个颜色,并根据事件开始或结束的时间将其放置在单元格中。 所以在cellForRowAtIndexPath,你会检查你的事件,如果这个单元格有任何事件,那么你将显示这个事件视图,颜色,并定位它。 如果将单元格高度设置为60,则可以非常容易地定位视图。 例如,如果事件从1:20开始,在小时1的单元格中,您将调整事件视图(0,20,320,40)的大小。

根据对该问题的评论的讨论,使用问题中链接的自定义集合视图布局库适用于上述可以使用CocoaPods轻松集成的问题。

UICollectionView使用自定义UICollectionViewLayout高度自定义。 请参阅正式的Apple文档以创build自定义布局 。

坦率地说,苹果公司的文件对我们大多数人来说太过压倒。 所以,你可以查看(谷歌) 自定义UICollectionViewLayout教程 ,通过任何你觉得最简单的,并继续使用库来满足您的特定需求。