Как установить referenceSizeForHeaderInSection, когда направление прокрутки макета в виде коллекции является горизонтальным? - PullRequest
0 голосов
/ 18 мая 2018

Заголовок будет добавлен правильно, если я не укажу направление прокрутки.Но если я укажу это, ячейки заменяются видом заголовка.Только заголовок будет отображен.Как решить это?Пожалуйста, помогите!

class HongbeiCollectionView: UICollectionView,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout,UICollectionViewDelegate {

var hongbeiData : [Hongbei]!

override init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) {
    let layout = UICollectionViewFlowLayout()
    layout.scrollDirection = .horizontal

//        layout.headerReferenceSize = CGSize(width: frame.width, height: 10)
    super.init(frame: frame, collectionViewLayout: layout)



}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}


func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int{
    print("Hongbei")
    return hongbeiData.count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell{
    print("cell is  being called")
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "HongbeiCell", for: indexPath) as! HongbeiCell
   cell.hongbeiButton.sd_setImage(with: URL.init(string: hongbeiData[indexPath.item].video_img ?? ""), for: .normal, placeholderImage: #imageLiteral(resourceName: "moren-2"))
     cell.hongbeiButton.clipsToBounds = true
    cell.hongbeiButton.layer.cornerRadius = 10.0

    print("title is \(hongbeiData[indexPath.item].title!)")
    cell.hongbeiLabel.text = hongbeiData[indexPath.item].title!
    cell.setID(id: hongbeiData[indexPath.item].video_id!)
    cell.hongbeiButton.setTitle("Button \(indexPath)", for: .normal)

    return cell
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize{
    return CGSize(width: 150, height: 150)

}

func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView{
    print("viewForSupplementaryElementOfKind is called")
    let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "HeaderForCollectionView", for: indexPath as IndexPath) as! HeaderForCollectionView
    headerView.labelHeader.text = "Hongbei"

    return headerView

}


func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize{
    print("referenceSizeForHeaderInSection")
    return CGSize(width: collectionView.frame.width, height: 30)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets{

    return UIEdgeInsets(top: 0, left: 20.0, bottom: 0, right: 0.0)
}

}

Если я укажу ширину referenceSizeForHeaderInSection's меньше collectionview.frame.width, то сначала будет отображаться заголовок, а затем ячейки.When the referenceSizeForHeaderInSection is collectionview.frame.width

When the referenceSizeForHeaderInSection is 200

Кроме того, если вы заметили, что OneyuanZone CollectionView выполняет вертикальную прокрутку и его заголовок добавляется правильно.

1 Ответ

0 голосов
/ 18 мая 2018

Здесь, в приведенном ниже коде,

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

ширина указанного вами заголовка является полной collectionView's шириной.Это причина, по которой клетки не видны.Попробуйте уменьшить его, чтобы вы могли видеть и клетки.

Попробуйте использовать приведенный ниже код.

CGSize(width: collectionView.frame.width - 50, height: 30)

Редактировать:

Просмотреть снимок экрана иерархии:

enter image description here

Дайте мне знать, если у вас все еще есть какие-либо проблемы.

...