我正在构建一个应用程序,我真的需要显示一个类似于iOS日历应用程序中的列表。我需要创建一个collectionView,我可以在其中扩展足以覆盖各自小时的单元格,如下所示:
我尝试了各种各样的事情,包括在Github的this project,我不明白如何在另一个项目中使用
除了这个项目,我还在使用UITableViewController时快速研究了不同的方法:
但我并没有真正得到我想要的地方。我需要在第一张图片中看到设计,并想知道是否有人能指出我正确的方向来实现这一目标?
非常感谢你的帮助!!
更新
在这个例子中,实际的单元格框架不应该代表一小时的开始时间吗? (而不是定制的分隔符)
更新
为什么层次结构如下所示:
这种定位似乎是"阻止"触摸细胞并且didSelectItemAtIndexPath
方法不会被调用。这适用于比其他单元更靠后的单元格。
答案 0 :(得分:8)
您确实应该使用UICollectionView
以及自定义布局。只需提供supplementary views
即可构建基本的每日计划(每小时一个视图),然后使用cells
来设置您的活动。
在继承UICollectionViewLayout
时,您需要实现一些方法:
collectionViewContentSize
应返回一个等于小时数(24)的高度乘以代表一小时的补充视图的高度。prepareLayout
几乎可以做任何事情。在该方法中,您将计算需要使用的每个 layoutAttributes 。通过获取事件的时间及其持续时间,您可以计算每个事件的帧。补充视图框(每一个"小时"块)也非常简单,因为它们的高度是固定的(origin.y =固定高度乘以小时)。layoutAttributesForElementsInRect:
只需遍历您之前准备的 layoutAttributes ,并返回其所有框架与所提供框架相交的所有内容。 layoutAttributesForItemAtIndexPath:
查找并返回与提供的indexPath匹配的单元格 layoutAttributes 。
layoutAttributesForSupplementaryViewOfKind:atIndexPath
查找并返回补充视图的 layoutAttributes ,该数据提供了indexPath。
接下来,将该布局的实例提供给集合视图:
self.collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:myCustomLayout]
然后,您只需要通过UICollectionView的委托&提供补充视图(a.k.a小时块)和单元格所需的视图。数据源。如果您需要UIViewController来提供与标准委托/ dataSource相关的更多信息,请随意在自定义布局中创建自定义委托!
注意:由于指示小时开始的行是单元格顶部边框下方的几个像素,因此您需要每次将事件移动相同的像素数。假设每行上面有6个像素,每小时块的高度为60像素,那么如果在凌晨2点开始均匀,则会设置origin.y = 2 * 60 + 6
(每小时2小时* 60像素+ 6像素填充)。您还需要将最后一个单元格块调整为6像素,因为它不会在下面有另一个单元格。
我建议您阅读有关创建自定义布局的the official documentation。
为了帮助您:我制作了quick sample project,因为制作自己的布局有时会很麻烦。去检查CalendarViewLayout
类,我添加了一些注释来解释我如何处理填充。这是它的样子:
答案 1 :(得分:3)
我不认为这很难做到。
你需要一个不同于你所尝试的视角。
使所有CollectionView单元格大小相同。它们代表1小时的时间,所以它们应该具有相同的大小。
然后在每个单元格中有另一个视图。这是表明存在事件的那个。此视图将显示一种颜色,并根据事件开始或结束的时间将其放置在单元格中。 因此,在cellForRowAtIndexPath中,您将检查您的事件,如果此单元格有任何事件,那么您将显示此事件视图,为其着色并定位它。如果将单元格设置为高度60,则可以非常轻松地定位视图。例如,如果事件从1:20开始,在小时1的单元格中,您将调整事件视图的大小(0,20,320,40)。
答案 2 :(得分:1)
根据对该问题的评论中的讨论,使用问题中链接的Custom Collection View Layout library适用于可以使用CocoaPods轻松集成的上述问题。
使用自定义UICollectionViewLayout
可以高度自定义UICollectionView。请参阅creating custom layouts的官方Apple文档。
坦率地说,Apple的文档对我们大多数人来说太过于无法应对。因此,您可以查找(谷歌)custom UICollectionViewLayout tutorial,查看您认为最简单的任何一个,然后根据您的具体需求使用该库。