0

Ich habe eine SammlungView mit nur 1 Abschnitt in meiner App, die Daten von API herunterladen. Ich habe eine Seitennummerierung und versuche, eine Ladefußzeile in meine CollectionView einzufügen. Die Überschrift erscheint normal. Ich habe in dieser Fußzeile ein UIActivityIndicatorView und ein UILabel. Wenn die erste an einer Grenze ausgelöst wird, sind die 2 Elemente in der Zelle vorhanden, aber wenn die zweite Grenze ausgelöst wird, ist die UIActivityIndicatorView nicht vorhanden.UIActivityIndicatorView verschwindet in CollectionView Fußzeile

Haben Sie eine Idee dafür.

Der Code der Zelle (BaseCell ist nur eine Klasse zu vermeiden, dass die init tippen und init jedes Mal erforderlich):

class loadingCell: BaseCell { 

    override func setupViews() { 
     super.setupViews() 

     backgroundColor = .yellow 

     let activity = UIActivityIndicatorView() 
     activity.backgroundColor = .red 
     activity.startAnimating() 
     activity.frame = CGRect(x: 10, y: 20, width: 20, height: 20) 
     let label = UILabel() 
     label.text = "hello" 
     label.frame = CGRect(x: 100, y: 20, width: 40, height: 20) 
     label.backgroundColor = .green 


     addSubview(activity) 
     addSubview(label) 

    } 

} 

Die Sammlung Delegatmethoden:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForFooterInSection section: Int) -> CGSize { 
    return CGSize(width: SCREENW, height: 50) 
} 

func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView { 

    if kind == UICollectionElementKindSectionFooter { 
     let loadingFooterView = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionFooter, withReuseIdentifier: loadingCell, for: indexPath) 
     return loadingFooterView 
    } 

    return UICollectionReusableView() 
} 

Die Zelle ist gut Eingetragen.

Was passiert, wenn der erste Grenzwert ausgelöst wird:

enter image description here

Und mit dem zweiten:

enter image description here

+0

UIActivityIndicatorView hat eine Eigenschaft namens 'hidesWhenStopped'. Wegen der Löschung der Header verwendet es den vorherigen Status, wenn Sie es nicht richtig konfiguriert haben. Sie können die prepareForReuse-Methode überschreiben, mit der Sie die Animation starten. –

+0

Dank @MaksymMusiienko, ich habe meine Post-Basis auf Ihren Kommentar antworten. Kannst du bestätigen, dass es das war, was du meintest? –

Antwort

0

Basierend auf @MaksymMusiienko Kommentar, ich habe schon versucht, diese, die den Job Setzen Sie die Animation des Spinner zurück.

class loadingCell: BaseCell { 

    let activitySpinner: UIActivityIndicatorView = { 
     let spinner = UIActivityIndicatorView() 
     spinner.backgroundColor = .red 
     spinner.startAnimating() 
     spinner.frame = CGRect(x: 10, y: 20, width: 20, height: 20) 
     return spinner 

    }() 

    override func setupViews() { 
     super.setupViews() 

     backgroundColor = .yellow 

     let label = UILabel() 
     label.text = "hello" 
     label.frame = CGRect(x: 100, y: 20, width: 40, height: 20) 
     label.backgroundColor = .green 


     addSubview(activitySpinner) 
     addSubview(label) 

    } 

    override func prepareForReuse() { 
     super.prepareForReuse() 
     activitySpinner.startAnimating() 
    } 
} 
+0

Ja. Wenn Sie diese Zelle nur für den Fall zeigen, wenn Sie Elemente laden :) Hat es für Sie funktioniert? –

+0

Yep wie ein Charme :) –

Verwandte Themen