Невозможно добавить нижний колонтитул в представление коллекции - PullRequest
0 голосов
/ 16 октября 2018

Все, что мне нужно, это нижний колонтитул высотой 50 с черным цветом фона.Ничего более.Забудьте о реализации ниже на некоторое время и дайте мне знать, как бы вы реализовали то же самое.

Я использую следующее:

enter image description here

enter image description here

enter image description here enter image description here

 func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
        let view = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionFooter, withReuseIdentifier: "FooterView", for: indexPath as IndexPath)
        // configure footer view
        return view
    }

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

Однако нижний колонтитул не прикреплен кпредставление коллекции.Я не могу понять, почему это не работает и как я должен это исправить.Пожалуйста, помогите мне исправить это.

Ответы [ 3 ]

0 голосов
/ 16 октября 2018

Как мне это сделать:

1) Создать пользовательский класс нижнего колонтитула:

import UIKit

class BlackFooterView: UICollectionReusableView {
    override init(frame: CGRect) {
        super.init(frame: frame)
        backgroundColor = .black
    }

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

2) Зарегистрировать класс нижнего колонтитула в UICollectionView и настроить размер ссылки (Обычно в viewDidLoad необходим метод ViewController:

override func viewDidLoad() {
    super.viewDidLoad()

    /// Class registration
    self.collectionView!.register(BlackFooterView.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionFooter, withReuseIdentifier: footerReuseIdentifier)
    /// Reference size
    (self.collectionView.collectionViewLayout as! UICollectionViewFlowLayout).footerReferenceSize = CGSize(width: collectionView.bounds.width, height: 50)
}

3) Реализуйте методы делегата:

override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
    if kind == UICollectionView.elementKindSectionFooter {
        return collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: footerReuseIdentifier, for: indexPath)
    }
    /// Normally should never get here
    return UICollectionReusableView()
}

4) Вуаля: enter image description here


Образец предоставлен в Swift 4.2

Примечание:

  1. Код генерации ячеек не включен.
  2. Для примера я использовал класс UICollectionViewController, поэтому методы delegate начинаются с override
  3. Вы также можете создавать нижние колонтитулы из XIB.В этом случае регистрация должна быть сделана с использованием registerNib: forSupplementaryViewOfKind: withReuseIdentifier: метод.
0 голосов
/ 16 октября 2018

Вот мой путь.Я проверил это, и это работает.

class ViewController: UIViewController, UICollectionViewDataSource {

     @IBOutlet weak var collectionView: UICollectionView!

     override func viewDidLoad() {
         super.viewDidLoad()
         collectionView.dataSource = self
     }

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

         let view = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionView.elementKindSectionFooter, withReuseIdentifier: "Footer", for: indexPath)
         view.backgroundColor = .red
         return view
     }
}
0 голосов
/ 16 октября 2018
override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
    if (kind == UICollectionElementKindSectionFooter) {
        let footerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "CartFooterCollectionReusableView", for: indexPath)
        // Customize footerView here
        return footerView
    } else if (kind == UICollectionElementKindSectionHeader) {
        let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "CartHeaderCollectionReusableView", for: indexPath)
        // Customize headerView here
        return headerView
    }
    fatalError()
}
...