我需要对正在开发的应用程序进行更改,而不是全职iOS开发人员。我正试图为iOS应用程序获得一个类似于pinterest的界面,并且我正在完成这个教程:https://www.raywenderlich.com/107439/uicollectionview-custom-layout-tutorial-pinterest
在他们的自定义UICollectionViewLayout中,它们覆盖layoutAttributesForElementsinRect
,但我从XCode 8编译器收到错误(尽管使用将Legacy Swift语言版本设置为是)。
我得到的错误是:Method does not override any method from its superclass
缩写代码为:
class PinterestLayout: UICollectionViewLayout {
....
override func layoutAttributesForElementsInRect(rect: CGRect) -> [AnyObject]? {
var layoutAttributes = [UICollectionViewLayoutAttributes]()
// Loop through the cache and look for items in the rect
for attributes in cache {
if CGRectIntersectsRect(attributes.frame, rect ) {
layoutAttributes.append(attributes)
}
}
return layoutAttributes
}
如果我将方法切换为私有它编译但不起作用,如果我删除覆盖,它会给我一个冲突。我想覆盖底层方法,但不知道如何让它工作。
答案 0 :(得分:5)
您的方法签名错误。这实际上是override
关键字存在的原因。它确保将像这样捕获API更改,而不是默默地不发生覆盖,从而导致难以诊断问题。
应该是
override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]?