0

私は、ヘッダーとフッターを持つUIcollectionViewを持っています。ビューデバッガでも空であると表示されますが、ヘッダはアプリケーション上にある静的なイメージで、何かがAPIから取得されておらず、どちらも表示されないため、奇妙です。swift UICollectionViewが空の場合もあるバグの偶数のヘッダを表示する

また、コンソールにはエラーが発生しません。別のビューに行き、reloadData()を強制しますが、何も表示しません。どのように私はこれをよりよくデバッグすることができますか、それが起こらないことを確認しますか?

これは、ビューデバッガがどのように見えるかです:

this is how the view debugger looks like

あなたは、ヘッダーとフッターの空の再利用可能な景色を見ることができます:

you can see the header and footer empty

編集:

これは補助的な見解がどのようにしてクレアであるかテッド使用RxDataSources

dataSource.supplementaryViewFactory = { (dataSource, collectionView, kind, indexPath) in 
     switch kind { 
     case UICollectionElementKindSectionHeader: 
      let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: CellReuseId.contentHeaderCollectionView, for: indexPath) as! ContentHeaderView 
      headerView.imageView.image = ImageAssets.contentBanner 
      let tapGestureRecognizer = UITapGestureRecognizer(target:self, action: #selector(self.showListOfEvents(_:))) 
      headerView.addGestureRecognizer(tapGestureRecognizer) 
      return headerView 

     case UICollectionElementKindSectionFooter: 
      let footerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: CellReuseId.contentFooterCollectionView, for: indexPath) as! ContentFooterView 
      footerView.setUpObjects() 
      //setUp Appropiate label or animation 
      let showFooter: Bool = !(self.centerActivityIndicator?.isAnimating ?? false) 
      footerView.setUpAppropiateDependingOnResults(isThereMoreResults: self.isThereMoreResults, showFooter: showFooter) 
      return footerView 
     default: break 
     } 
     //return default 
     return UICollectionReusableView() 
    } 

そして、これは、APIのモデルを取得し、私は同じUIのレンダリングと同じ問題を抱えていたcollectionView

let results = Observable.of(paginationObserver, offlineObserver).merge() 
    //calls method that calls DB with the appropiate data 
     .flatMapLatest { [unowned self] parametersChanged -> Driver<LecturesStateResults> in 
      //since this is being called again, we make sure to clean out "old cache data" on view model 
      self.videoObject.lecturesResults.value.removeAll(keepingCapacity: true) 
      return self.setupLectures().asDriver(onErrorJustReturn: LecturesStateResults.empty) 
     } 

    results 
     //Bind the result observable to the UIcollectionView 
     //UiCollection view only wants an array not an Observable 
     .map { 
      if !$0.results.isEmpty { self.centerActivityIndicator?.stopAnimating()} 
      return [SectionModel(model: "", items: $0.results)] 
     } 
     .bind(to: lectureViewSquare.rx.items(dataSource: dataSource)) 
     .addDisposableTo(disposeBag) 

    lectureViewSquare.rx.setDelegate(self) 
     .addDisposableTo(disposeBag) 
+0

だったあなたは私たちにいくつかのコードを示してもらえますか? – kikettas

+0

UICollectionViewとUICollectionCellが定義されており、RxSwiftを使用してデータをテーブルにバインドするので、少し複雑です。私もUICollectionViewDelegateFlowLayoutを使用しています – baldemora

+0

ストーリーボードまたはXibを使用していますか?あなたはCollectionViewのdataSourceメソッドをオーバーライドすると思いますか? – kikettas

答えて

1

にそれらをバインドするコードですが、RxSwiftを使用せず。

問題を修正したコードは

dispatch_async(dispatch_get_main_queue(), ^{ 
     [self.collectionView reloadData]; 
}); 
関連する問題