UICollectionViewLayout项目与斯威夫特
问题描述:
间距我试图this Objective-C的答案转换为斯威夫特,但它总是在这条线崩溃:UICollectionViewLayout项目与斯威夫特
var previousLayoutAttributes: UICollectionViewLayoutAttributes = attributesToReturn[i - 1]
这是函数:
override func layoutAttributesForElementsInRect(rect: CGRect) -> [AnyObject]? {
var attributesToReturn:[UICollectionViewLayoutAttributes] = super.layoutAttributesForElementsInRect(rect) as! [UICollectionViewLayoutAttributes]
for var i = 0 ; i < attributesToReturn.count ; i++
{
var currentLayoutAttributes: UICollectionViewLayoutAttributes = attributesToReturn[i]
var previousLayoutAttributes: UICollectionViewLayoutAttributes = attributesToReturn[i - 1]
var maximumSpacing: CGFloat = 50
var origin = CGRectGetMaxX(previousLayoutAttributes.frame)
if origin + maximumSpacing + currentLayoutAttributes.frame.size.width < self.collectionViewContentSize().width
{
var frame: CGRect = currentLayoutAttributes.frame
frame.origin.x = origin + maximumSpacing
currentLayoutAttributes.frame = frame
}
}
return attributesToReturn
}
我猜这是因为一开始没有i - 1对象,但我还能怎么做?
答
您可以重写代码,以检查负指数。
let origin: CGFloat
if i - 1 >= 0 {
let previousLayoutAttributes = attributesToReturn[i - 1]
origin = previousLayoutAttributes.frame.maxX
} else {
origin = 0
}
该链接中的两个答案都在Swift中......无论如何,您试图访问索引-1处的项目,这是导致崩溃的原因。 – timgcarlson