2016-11-28 6 views
0

次のコードを使用して、セルのサイズを個別に変更しようとしています。動的にセルサイズを変更する際のエラー

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
    var itemSize : CGSize? 

    let currentCell = self.collectionView?.cellForItem(at: indexPath) as! CustomCell 
    let imageSize : CGSize = (currentCell.imageView?.image?.size)! 
    let aspectRatio : CGFloat = imageSize.width/imageSize.height 

    if aspectRatio > 1 { 
     itemSize = CGSize(width: self.maxItemSize.width, height: maxItemSize.height/aspectRatio) 
    }else{ 
     itemSize = CGSize(width: self.maxItemSize.width * aspectRatio, height: maxItemSize.height) 
    } 

    return itemSize! 

} 

しかし、私はいつも致命的なエラーを取得:私はブロックを削除する場合は、他の後、すべてが完璧に動作

let currentCell = self.collectionView?.cellForItem(at: indexPath) as! CustomCell 

このラインでオプションの値をアンラップしながら、予想外に誰もが何が起こっているかを知っている.. nilを見つけに?

ありがとうございます。

編集:追加されましたCellForItemAt機能

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellIdentifier, for: indexPath) as! CustomCell 
    cell.backgroundColor = colorArray[indexPath.section] 
    cell.imageView?.image = imageArray[indexPath.item] 
    return cell 
} 
+0

@ThomasG。お返事ありがとうございました。あなたは正しいです..私はテストしました。問題はcustomCellへのダウンキャストにありますが、何が間違っているのかまだ分かりません。私は編集部分にCellForItemAt関数を提供しました。本当にありがとう! – user3608914

答えて

1

sizeForItemAt()cellForItemAt()前に呼び出されるので、あなたは、セル(その画像サイズ)からの情報をつかむしようとしているが、細胞がまだ作成されていません。

私はあなたのcellForItemAt()あなたは画像の配列を使用して、画像サイズをつかむためにsizeForItemAt()で同じ配列を使用することを検討の上、例えば、あなたのsize FUNCの先頭は次のようになりますことを確認。

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
    var itemSize : CGSize? 

    // delete this line** let currentCell = self.collectionView?.cellForItem(at: indexPath) as! CustomCell 
    // let imageSize : CGSize = (currentCell.imageView?.image?.size)! 
    let imageSize : CGSize = imageArray[indexPath.item].size // or indexPath.row depending on your structure 
    let aspectRatio : CGFloat = imageSize.width/imageSize.height 
    ... 
} 
+1

ありがとう、実際に私はちょうどそのhahaをした..とにかく何が間違っていたか考えていた..しかし、あなたは本当に良い答えを与えた..ありがとう! (: – user3608914

関連する問題