2016-08-12 11 views
0

一番下までスクロールしてからバックアップすると、コレクションビューのセルが変更されています。スクロール時にスウィフトコレクションビューのデータが変更される

私のviewDidLoadには、データベースからすべての値を取り出し、メインスレッドからreloadDataを呼び出すParseクエリがあります。

初期ロードでは、表示可能なセルが正しく表示されます。

しかし、スクロールすると、表示されていないセルが読み込まれ、1/3が正しく表示されません。

その後、最初の表示可能なセルまでスクロールすると、最初の表示セルは正しく表示されません。

正しく表示されていないと、私のデータベースには、整列のためのフィールドがあります。これは中央、左、右の文字列を保持できます。

この値は、自分の画像とボタンをセル内でどのように配置するかということです。

ここに私のcellForRow関数があります。

if(cell.picture.frame.origin.x == 0){... 

セルを再利用した場合、それは"left"だがない:ここでは

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell{ 
    let cell: FeedThumbnail = collectionView.dequeueReusableCellWithReuseIdentifier("feed_cell", forIndexPath: indexPath) as! FeedThumbnail 

    //handle cell alignment 
    if(align[indexPath.row] == "left"){ 
     //leave alignment as is for buttons 
     if(cell.picture.frame.origin.x == 0){ 
      cell.picture.frame.offsetInPlace(dx: -75, dy: 0) 
     } 
    } 

    else if(align[indexPath.row] == "center"){ 
     cell.holder_view.frame.offsetInPlace(dx: 105 - cell.holder_view.frame.origin.x, dy: 0) 
     //leave image as is 
    } 

    else if(align[indexPath.row] == "right"){ 
     cell.holder_view.frame.offsetInPlace(dx: 220 - cell.holder_view.frame.origin.x, dy: 0) 
     cell.picture.frame.offsetInPlace(dx: 100 - cell.picture.frame.origin.x, dy: 0) 
    } 

    return cell 
} 

は、クラスには、このように、cellFor...に条件を得た私のコ​​レクションビュー電池用

import UIKit 

class FeedThumbnail: UICollectionViewCell { 

@IBOutlet weak var picture: UIImageView! 
@IBOutlet weak var comment_btn: UIButton! 
@IBOutlet weak var heart_btn: UIButton! 
@IBOutlet weak var rescip_btn: UIButton! 
@IBOutlet weak var og_btn: UIButton! 
@IBOutlet weak var name_lbl: UIButton! 
@IBOutlet weak var holder_view: UIView! 
} 
+0

あなたは 'FeedThumbnail'クラスを投稿することができますか? – RPK

+0

私はちょうどそれを追加しました。 – Basic

+0

ボタンはすべてholder_viewの内側にあります。 – Basic

答えて

0

ですあなたの状態を満足させるので、再使用する前と同じ外観を保ちます。あなたはこれで何かをするべきです。以下はサンプルコードです:

if(cell.picture.frame.origin.x == 0){ 
    ... 
} else { 
    // make it a left cell 
} 
+0

私はまったくそうではありません:/。ですから、基本的にはif文の代わりにelse文の調整を行うために自分のコードを切り替えるべきですか?セルが表示されるたびにコンテンツの配置を変更しないでください。 – Basic

+0

@TomGreco私の悪い表現に申し訳ありません。あなたが再利用されたセルを手に入れたら、それはおそらく左、右、または中心になります。それをリフレッシュすると、元の外観のセルが得られます。わかりますか? – Lumialxk

0

LumialxkとRPKはこう言います。 セルorigin.xを変更する前にリフレッシュする必要がありました。

私は、細胞がそれらのやり方で再利用されるとは思っていませんでした。

解決策は、prepareForReuseをオーバーライドし、frame.origin.xを変更する前に元の値に戻すことでした。

輸入のUIKit

クラスFeedThumbnail:UICollectionViewCell {

@IBOutlet weak var picture: UIImageView! 
@IBOutlet weak var comment_btn: UIButton! 
@IBOutlet weak var heart_btn: UIButton! 
@IBOutlet weak var rescip_btn: UIButton! 
@IBOutlet weak var og_btn: UIButton! 
@IBOutlet weak var name_lbl: UIButton! 
@IBOutlet weak var holder_view: UIView! 


override func prepareForReuse() { 
    picture.frame.origin.x = 0 
    holder_view.frame.origin.x = 0 
    super.prepareForReuse() 
} 

}

関連する問題