ADMozaicCollectionViewLayout
是什么?
ADMozaicCollectionViewLayout
是另一个实现 "砖块" 或 "拼图" 布局的 UICollectionViewLayout
子类。
为什么还需要另一个?
因为已经有很多同类型的布局了
但这个项目是完全用 swift
实现的,所以如果您不想弄乱 objective-c
代码和 swift
代码,您就在正确的页面上。另外,与其他 "拼图" 布局相比,这也具有优势 - 您不受单元格预定义大小的限制。
使用方法
这种布局的核心理念是将 UICollectionView
的边界分割成一种类似于“矩阵”的形式。为了实现这一点,ADMozaikCollectionViewLayout
需要指定特定部分中的行高和列宽。
/// Designated initializer for `ADMozaikLayout`
///
/// - Parameter delegate: delegate/datasource for the layout
public init(delegate: ADMozaikLayoutDelegate)
它要求代理对象符合 ADMozaikLayoutDelegate
协议。第一个必填方法是返回布局中每个项的大小。
/// Method should return `ADMozaikLayoutSize` for specific indexPath
///
/// - Parameter collectionView: collection view is using layout
/// - Parameter layout: layout itself
/// - Parameter indexPath: indexPath of item for the size it asks for
///
/// - Returns: `ADMozaikLayoutSize` struct object describes the size
func collectionView(_ collectionView: UICollectionView, mozaik layout: ADMozaikLayout, mozaikSizeForItemAt indexPath: IndexPath) -> ADMozaikLayoutSize
其中 ADMozaikLayoutSize
以 ADMozaikCollectionViewLayout
的术语描述了每个单元格的大小。
/**
* Defines the size of the layout item
*/
public struct ADMozaikLayoutSize {
/// Columns number that item requires
let columns: Int
/// Rows number that item requires
let rows: Int
}
第二个方法是获取布局中每个特定部分几何信息。
/// Method should return `ADMozaikLayoutSectionGeometryInfo` to describe specific section's geometry
///
/// - Parameters:
/// - collectionView: collection view is using layout
/// - layoyt: layout itself
/// - section: section to calculate geometry info for
///
/// - Returns: `ADMozaikLayoutSectionGeometryInfo` struct object describes the section's geometry
func collectonView(_ collectionView: UICollectionView, mozaik layoyt: ADMozaikLayout, geometryInfoFor section: ADMozaikLayoutSection) -> ADMozaikLayoutSectionGeometryInfo
其中 ADMozaikLayoutSectionGeometryInfo
描述了该部分的全部几何参数。
/**
* Defines the layout's information
*/
public struct ADMozaikLayoutSectionGeometryInfo {
/// array of `ADMozaikLayoutColumn` for the layout
let columns: [ADMozaikLayoutColumn]
/// height for each row in points
let rowHeight: CGFloat
/// minimum space between items
let minimumInteritemSpacing: CGFloat
/// minimum space between each row
let minimumLineSpacing: CGFloat
/// Insets for the section from top, left, right, bottom
let sectionInset: UIEdgeInsets
/// Height for header in section
/// Width is currently limited to the collection view width
let headerHeight: CGFloat
/// Height for footer in section
/// Width is currently limited to the collection view width
let footerHeight: CGFloat
}
内容模式选项
/// Method should return `ADMozaikLayoutSectionContentMode` to describe specific section's geometry
///
/// - Parameters:
/// - collectionView: collection view is using layout
/// - layout: layout itself
/// - section: section to return content mode for
///
/// - Returns: `ADMozaikLayoutSectionContentMode` enum describes the section's content mode and how to position cells
func collectonView(_ collectionView: UICollectionView, mozaik layout: ADMozaikLayout, contentModeFor section: ADMozaikLayoutSection) -> ADMozaikLayoutSectionContentMode
contentMode
选项控制如何填充 Mozaik 布局中的项。
fill
- 尝试用项目填充空白空间;ordered
- 保持提供项的顺序,因此收集视图中可能出现空白空间。
请查看示例项目以获取完整的示例。请注意,当前的示例项目应在 iPhone 8 屏幕大小上运行。
安装
CocoaPods
要使用 CocoaPods 将 ADMozaicCollectionViewLayout 集成到您的 Xcode 项目中,请在您的 Podfile
中指定它。
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!
pod 'ADMozaicCollectionViewLayout', '~> 4.0'
Carthage
要使用 Carthage 将 ADMozaicCollectionViewLayout 集成到您的 Xcode 项目中,请在您的 Cartfile
中指定它。
github "Antondomashnev/ADMozaicCollectionViewLayout" ~> 4.0
运行 carthage update
构建框架,并将构建的 ADMozaikCollectionViewLayout.framework
拖入您的 Xcode 项目。
迁移指南
许可证
ADMozaicCollectionViewLayout 在 MIT 许可下可用。更多信息请参阅 LICENSE。