Swift - UITableView 部分标题不显示

问题描述 投票:0回答:0

我目前正在开发一个类似于 IMDb 的简单应用程序,我的目标是显示从 API 检索到的电影海报和标题。虽然我已经成功地在页面底部展示了这些信息,但我在标题中展示相同的数据时遇到了困难。

import UIKit

class HomeHeader: UICollectionReusableView,ReuseProtocol,NibProtocol {
    
    @IBOutlet weak var collection: UICollectionView!
    @IBOutlet weak var topView: UIView!
    @IBOutlet weak var viewBottom: UIView!
    var items = [MovieResult]()
    
    override func layoutSubviews() {
        collection.registerCell(type: HorizontalCollectionViewCell.self)
    }

    func configure(data: [MovieResult]){
        items = data
        collection.reloadData()
    }
  
}

extension HomeHeader: UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout{
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        items.count
    }
    
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell: HorizontalCollectionViewCell = collectionView.dequeueCell(for: indexPath)
        cell.configure(data: items[indexPath.item])
            return cell
    }
    
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        let width = collectionView.frame.width * 143 / 375
        let height = collectionView.frame.height * 283 / 812
        return CGSize(width: width, height: height)
    }
}

我的 HomeViewController

import UIKit

class  HomeViewController: UIViewController {
    
    @IBOutlet private weak var collectionView: UICollectionView!
    let viewModel = HomeViewModel()
    override func viewDidLoad() {
        super.viewDidLoad()
        
        collectionSetup()
        viewModelConfiguration()
        
        
    }
    
    
    fileprivate func collectionSetup(){
        collectionView.registerCell(type: VerticalCollectionViewCell.self)
        collectionView.registerSupplementaryView(type: HomeHeader.self, ofKind: UICollectionView.elementKindSectionHeader)
    }
    
    fileprivate func viewModelConfiguration(){
        
        viewModel.getCatagoryItems()
        viewModel.getNowPlaying()
        

        viewModel.errorCallBack = { [weak self] errorMesage in
            print("error: \(errorMesage)")
        }
        viewModel.successCallBack = { [weak self] in
            self?.collectionView.reloadData()
        }
        
    }


}
extension HomeViewController:UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout{
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
//        return viewModel.numberOfItems()
        return viewModel.movieItems.count
    }

    

    
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell: VerticalCollectionViewCell = collectionView.dequeueCell(for: indexPath)
        cell.configure(data: viewModel.movieItems[indexPath.item])
        return cell
    }

    


    func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
        let header: HomeHeader = collectionView.dequeueSupplementaryView(ofKind: UICollectionView.elementKindSectionHeader, for: indexPath)
        header.configure(data: viewModel.nowPlayingItems)
        return header
    }




        
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: collectionView.frame.width * 327 / 375, height: 120)
    }
    



    
    
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
        CGSize(width: collectionView.frame.width, height: 365)
    }
    

    
    
}
ios swift uitableview uikit
© www.soinside.com 2019 - 2024. All rights reserved.