测试已测试 | ✗ |
Lang语言 | Obj-CObjective C |
许可 | 自定义 |
发布最后发布 | 2015年4月 |
由 Brian Dorfman,Sam Grossberg 维护。
一个简单、通用的收藏视图布局,具有多种自定义选项。
FSQCollectionViewAlignedLayout 是一个通用收藏视图布局,旨在非常有灵活性和可配置性。它的目标是让用户无需每次当 UICollectionViewFlowLayout 不适用于它们的视图时都编写自己的自定义布局类。
布局就像一个非常简单的排版软件,其中每个单元就像一个“单词”或字体符号,每个部分就像一个“段落”,包含多行单元。
这个类在它的头文件(应该通过 Xcode 的文档弹出窗口自动解析并获取)中进行了彻底的文档记录,但此文件包括对其功能的概述。
对齐布局只有两个文件,没有外部依赖项,所以它应该很容易添加到您的项目中。只需将文件添加到您的项目中,然后您就可以开始使用对齐布局来使用您的收藏视图。
我们建议使用 git submodules 将您的仓库链接到这个仓库,以便在未来版本发布时易于更新。
FSQCollectionViewAlignedLayoutSectionAttributes
类定义了自定义收藏视图部分布局的属性。
如果您所有部分都具有相同的属性,您可以在布局上设置 defaultSectionAttributes
属性。或者,您可以在您的代理中实现以下方法以返回每个部分的不同属性
- (FSQCollectionViewAlignedLayoutSectionAttributes *)collectionView:(UICollectionView *)collectionView
layout:(FSQCollectionViewAlignedLayout *)collectionViewLayout
attributesForSectionAtIndex:(NSInteger)sectionIndex;
以下部分属性可用
FSQCollectionViewHorizontalAlignment horizontalAlignment — 此属性对齐收藏视图的每行,相对于整个部分。选项有 Left、Right 和 Center
FSQCollectionViewVerticalAlignment verticalAlignment — 如果相同行的单元格高度不同,该属性会将其相对于彼此垂直对齐。选项是 Top、Bottom 和 Center
CGFloat itemSpacing — 这是相同行单元格之间的水平间距(以点为单位)。
CGFloat lineSpacing — 这是指段中一行底部与下一行顶部之间的垂直间距(以点为单位)。每一行的边界框被视为一个矩形,恰好包围该行上的每个单元格。因此,如果同一行上的单元格高度不均匀,则它们与下一行或前一行的垂直空间可能会更大(这取决于许多其他因素,例如垂直对齐和单元格填充)。
UIEdgeInsets insets — 这是指该部分四周(上下左右)的点间距。该部分的边界框被视为一个矩形,恰好包含该部分中的每一行。
该类实例不可变,因此您必须在创建时定义所有属性。有两个用于创建新的属性对象的类方法
+ (instancetype)withHorizontalAlignment:(FSQCollectionViewHorizontalAlignment)horizontalAlignment
verticalAlignment:(FSQCollectionViewVerticalAlignment)verticalAlignment;
此方法根据指定的对齐方式创建一个新部分属性对象。默认行间距和项目间距为5点,没有填充(UIEdgeInsetsZero)。
+ (instancetype)withHorizontalAlignment:(FSQCollectionViewHorizontalAlignment)horizontalAlignment
verticalAlignment:(FSQCollectionViewVerticalAlignment)verticalAlignment
itemSpacing:(CGFloat)itemSpacing
lineSpacing:(CGFloat)lineSpacing
insets:(UIEdgeInsets)insets;
此方法与上述方法相同,但允许您指定自己的间距和填充。
此外,该类定义了四个共享指针,用于常用对齐方式,以方便使用。
+ (FSQCollectionViewAlignedLayoutSectionAttributes *)topLeftAlignment;
+ (FSQCollectionViewAlignedLayoutSectionAttributes *)topCenterAlignment;
+ (FSQCollectionViewAlignedLayoutSectionAttributes *)topRightAlignment;
+ (FSQCollectionViewAlignedLayoutSectionAttributes *)centerCenterAlignment;
FSQCollectionViewAlignedLayoutCellAttributes类定义了自定义收藏视图中单元格布局的属性。
如果您的所有单元格具有相同的属性,则可以在布局上设置defaultCellAttributes
属性。或者,您可以在您的代理中实现以下方法,以返回每个单元格的不同属性
- (FSQCollectionViewAlignedLayoutCellAttributes *)collectionView:(UICollectionView *)collectionView
layout:(FSQCollectionViewAlignedLayout *)collectionViewLayout
attributesForCellAtIndexPath:(NSIndexPath *)indexPath;
可用的单元格属性如下
UIEdgeInsets insets — 这是指单元格四周(上下左右)的点间距。对于布局定位,这些填充会添加到单元格大小上。例如,一个50x50点的单元格四周有5点填充,将像一个60x60点的单元格那样布局。然而,实际的UICollectionViewCell类最终将达到您报告的正确大小。
BOOL shouldBeginLine — 如果是YES,这会强制单元格成为该行上的第一个单元格,如果不是这种方式布局。
BOOL shouldEndLine — 如果是YES,这会强制单元格成为该行上的最后一个单元格,如果不是这种方式布局。
BOOL startLineIndentation — 如果是YES并且部分的排列是Left或Right,这将强制未来所有行与单元格的左边缘或右边缘对齐。所有未来的行的可用宽度将会降低,并且会添加适当的侧边填充以使其内嵌。缩进从单元格的实际边角开始,不包括填充。每个部分只能有一个缩进;同一部分中的后续单元格的缩进会覆盖之前的缩进。
该类的实例不可变,因此您必须在创建时定义所有属性。有一个用于创建新属性对象的类方法
+ (instancetype)withInsets:(UIEdgeInsets)insets
shouldBeginLine:(BOOL)shouldBeginLine
shouldEndLine:(BOOL)shouldEndLine
startLineIndentation:(BOOL)startLineIndentation;
此方法创建一个具有指定值的新的单元格属性对象。
此外,该类定义了一个没有填充、没有换行符和没有缩进的默认属性对象的共享指针。
+ (FSQCollectionViewAlignedLayoutCellAttributes *)defaultCellAttributes;
如果您所有单元格的大小相同,您可以在布局上设置defaultCellSize
属性。或者,您可以在您的代理中实现以下方法来返回每个单元格的不同大小
- (CGSize)collectionView:(UICollectionView *)collectionView
layout:(FSQCollectionViewAlignedLayout *)collectionViewLayout
sizeForItemAtIndexPath:(NSIndexPath *)indexPath
remainingLineSpace:(CGFloat)remainingLineSpace;
这反映了UICollectionViewDelegateFlowLayout所使用的尺寸委托方法,但增加了remainingLineSpace
参数。此参数包含正在布局的当前行上剩余的水平空间量。如果您返回宽度小于或等于剩余行空间的尺寸,则它将因此与同一行布局(除非有任何其他单元格属性可能会更改此设置,例如换行符)。当您想根据宽度计算高度以填充其余行的空间时,这可能会很有用(例如,用于文本或图像尺寸目的)。
布局有以下顶层属性,用于自定义整个集合视图。
CGSize defaultCellSize —— 如果未实现相应的委托方法,则此尺寸用于所有单元格。默认为100x100点。
FSQCollectionViewAlignedLayoutSectionAttributes *defaultSectionAttributes —— 如果未实现相应的委托方法,则使用此属性对象用于所有部分。如果未设置,默认值为FSQCollectionViewAlignedLayoutSectionAttributes topLeftAlignment]。
FSQCollectionViewAlignedLayoutCellAttributes *defaultCellAttributes —— 如果未实现相应的委托方法,则使用此属性对象用于所有单元格。如果未设置,默认值为[FSQCollectionViewAlignedLayoutCellAttributes defaultCellAttributes]。
CGFloat sectionSpacing —— 这是底部部分与下一个部分的顶部之间的垂直间距(以点为单位)。部分的外框被认为是恰好包含部分中所有行的矩形。如果未设置,默认值为10点。
UIEdgeInsets contentInsets —— 这是围绕集合视图内容的四个边框的间距(以点为单位)。外框是一个恰好包含集合中所有部分的矩形。如果未设置,则默认为所有边框的5点间距。
BOOL shouldPinSectionHeadersToTop —— 这控制当前顶部部分标题是否固定在视图的顶部,类似于使用UITableViewStylePlain时UITableView的工作方式。默认值为YES。
FSQCollectionViewAlignedLayout最初由Foursquare Labs为内部使用开发。它最初由Brian Dorfman编写(@bdorfman)并由Brian Dorfman和Cameron Mulhern维护。