ios - 如何子类化 UICollectionViewFlowLayout 以便可以覆盖 layoutAttributesForElementsInRect

标签 ios swift xcode6

我想创建一个垂直无限滚动,在阅读了这么多教程后我明白我需要子类化 UICollectionViewFlowLayout。问题是我不完全明白该怎么做。

我试过以下方法: 1. 创建了一个新类 newView 并将其分配给属性检查器自定义类部分中的 View Controller 。

class newView: UICollectionViewController,
UICollectionViewDataSource, UICollectionViewDelegate {
  1. 在此类中实现(覆盖)cellForItemAtIndexPath 和 sizeForItemAtIndexPath,效果很好。到目前为止,我有一个垂直 ScrollView ,其中 1 行包含 2 个项目。但是我在两行之间有不相等的空间。布置前 2 项后,第三项的垂直位置低于前 2 项中较长的一项,如下所示: enter image description here

我读过许多 SO 线程讨论并建议将 UICollectionViewFlowLayout 子类化并覆盖 layoutAttributesForElementsInRect 方法以获得所需的显示。但是当我尝试在我的 View Controller 中添加流布局时,如下所示,它给我错误:

class DiscoverView: UICollectionViewController, UICollectionViewFlowLayout,
UICollectionViewDataSource, UICollectionViewDelegate {

然后我认为可能是我的 View 布局需要子类化而不是 Controller ,所以我尝试创建一个单独的类,如下所示:

class newViewLayout: UICollectionViewFlowLayout {

override func layoutAttributesForElementsInRect(rect: CGRect) -> [AnyObject]? {
    return super.layoutAttributesForElementsInRect(rect)
}

然后我尝试将此类分配给我的 View 布局。但它不会出现在自定义类部分(属性检查器)下。它也没有出现在 Attribute inspector > collection view > layout > set custom > Class

我知道这是一些非常基本和愚蠢的错误,但不确定我在概念上做错了什么。

最佳答案

虽然这是旧的,但我不想添加使它对我有用的解决方案:)

您应该在 viewDidLoad 中添加子类,如下所示:

collectionView?.collectionViewLayout = YourCustomClass

关于ios - 如何子类化 UICollectionViewFlowLayout 以便可以覆盖 layoutAttributesForElementsInRect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30341250/

相关文章:

ios - objective-c 在发送到 web 服务后卡住

ios - 如何使我的 UIImageView 位于 Swift 中的模糊效果之上?

swift - iPad map 屏幕分辨率停留在 1024x768

ios - 使用 Generic 检查是否存在 Swift Array 项目

c++ - 如何修复 "reference cannot be bound to dereferenced null pointer"警告

ios - 在 Objective-C 中定义常量的最佳方式

objective-c - 在 iOS 4 中,只有点击按钮两次,UIActionSheet 才会起作用

ios - 参数化 UIView 类属性不显示 View

ios - 扩展保存特定元素类型的快速数组

swift - 在 ReactiveKit/Bond 中计算 Observable