Неоднозначная ссылка на элемент collectionView (_: layout :imumLineSpacingForSectionAt :) ' - PullRequest
0 голосов
/ 24 января 2020

Я обнаружил в своем коде ошибку, которая действительно меня раздражает. Я закодировал Swiping View Controller в отдельном приложении и сейчас пытаюсь интегрировать его в это новое приложение.

Вот как выглядит класс контроллера представления:

class SwipingController: UIViewController, UICollectionViewDelegateFlowLayout {

В основном ошибка выглядит следующим образом:

Ambiguous reference to member 'collectionView(_:layout:minimumLineSpacingForSectionAt:)'

Вот часть моего кода, дайте мне знать, если мне нужно добавить больше !!

extension SwipingController {

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

     func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return pages.count
    }

     func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellId", for: indexPath) as! PageCell

        let page = pages[indexPath.item]
        //let page = pages[indexPath.row]
        cell.page = page
        return cell
    }

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

}

ошибка происходит при каждом упоминании «CollectionView» в главном окне контроллера

 @objc private func handleNext() {
        let nextIndex = min(pageControl.currentPage + 1, pages.count - 1)
        let indexPath = IndexPath(item: nextIndex, section: 0)
        pageControl.currentPage = nextIndex
        collectionView?.scrollToItem(at: indexPath, at: .centeredHorizontally, animated: true)
    }

Я также сейчас получаю сообщение об ошибке:

Value of type 'SwipingController' has no member 'collectionViewLayout'

Что происходит на этой странице:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {

        coordinator.animate(alongsideTransition: { (_) in
            self.collectionViewLayout.invalidateLayout()

            if self.pageControl.currentPage == 0 {
                self.collectionView?.contentOffset = .zero
            } else {
                let indexPath = IndexPath(item: self.pageControl.currentPage, section: 0)
                self.collectionView?.scrollToItem(at: indexPath, at: .centeredHorizontally, animated: true)
            }

        }) { (_) in

        }
    }

, дайте мне знать, если Мне нужно добавить больше кода, пожалуйста!

Ответы [ 2 ]

1 голос
/ 24 января 2020

Проблема возникает из-за того, что вы пытаетесь использовать переменную collectionView в вашем ViewController, когда она еще не объявлена, для решения этой проблемы вам нужно объявить ее следующим образом.

Swift 5.x :

@IBOutlet weak var collectionView: UICollectionView?

Это генерирует IBOutlet, который вы можете использовать для соединения переменной, созданной с UICollectionView, из вашей раскадровки. Также не забудьте соединить delegate и dataSource с ViewController, который его реализует.

func numberOfSections(in collectionView: UICollectionView) -> Int

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell

Для получения дополнительной информации о том, как реализовать UICollectionView нажмите здесь :

В качестве личной рекомендации я бы сказал, что в тот момент, когда вы объявляете переменные пользовательского интерфейса как UIView, UILabel или, в данном случае UICollectionView, используйте префикс для поддержания порядка и подходящей номенклатуры.

Например:

@IBOutlet weak var clvPages: UICollectionView?

Надеюсь, это поможет вам, я буду следить за вашими комментариями.

0 голосов
/ 27 января 2020

Мне удалось решить эту проблему, борясь с этим в течение нескольких часов:

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

Спасибо всем, кто помог!

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