Применить UICollectionViewDelegateFlowLayout к определенному c представлению коллекции в контроллере представления с несколькими представлениями коллекции - PullRequest
0 голосов
/ 29 мая 2020

Я разрабатываю экран, на котором у меня есть 3 представления Collectio.

@IBOutlet weak var colorCollectionView: UICollectionView!
@IBOutlet weak var sizesCollectionView: UICollectionView!
@IBOutlet weak var imgCollectionView: UICollectionView!

Я хочу применить некоторые методы UICollectionViewDelegateFlowLayout только к imgCollectionView.

extension ItemDetailVC: UICollectionViewDelegateFlowLayout {

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
        if collectionView == imgCollectionView{
            return UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
        }
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        if collectionView == imgCollectionView{
            let size = collectionView.frame.size
            return CGSize(width: size.width, height: size.height)
        }
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        if collectionView == imgCollectionView{
            return 0.0
        }
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
        if collectionView == imgCollectionView{
            return 0.0
        }
    }
}

, но у меня возникают ошибки из-за отсутствующего возвращаемого значения.

enter image description here

1 Ответ

0 голосов
/ 29 мая 2020

Вы можете создать собственный UICollectionView для этого


  • Создать свой CollectionView
public class ImageCollectionView: UICollectionView {

  override public func awakeFromNib() {
    super.awakeFromNib()

    self.delegate = self
  }
}

// MARK: - UICollectionViewDelegateFlowLayout

extension ImageCollectionView: UICollectionViewDelegateFlowLayout {

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
        return UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        let size = collectionView.frame.size
        return CGSize(width: size.width, height: size.height)
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        return 0.0
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
        return 0.0
    }
}

  • Установите свой custom CollectionView в вашем ItemDetailVC
@IBOutlet weak var imgCollectionView: ImageCollectionView!

ПРИМЕЧАНИЕ: Вам не нужно устанавливать imgCollectionView.delegate в ItemDetailVC


  • Удалить UICollectionViewDelegateFlowLayout функций из ItemDetailVC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...