Как я могу выровнять colectionViewCells по левому краю? - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть cUIolectionView, в котором иногда есть только 1 предмет. Если это так, элемент выравнивается по центру, см. Рисунок:

enter image description here

Но я хочу, чтобы элемент был выровнен по слева.

Я нашел этот ответ в StackOverflow, leftAlign ячейки в UIColectioniew - StackOverFlow , но когда я добавил класс, указанный в принятом ответе, к моей codeBase, и добавил его в viewControler:

        let leftAlignLayout = AlignedCollectionViewFlowLayout(horizontalAlignment: .left, verticalAlignment: .top)
        gamesColectionView.collectionViewLayout = leftAlignLayout

это выровняло, как я хотел, но это сделало клетки очень маленькими (см. Рисунок)

enter image description here

Я также пытался добавить это из Github: AlignedCollectionViewFlowLayout - GitHub , но это имело тот же результат.

Я пытался исправить эту ошибку, добавив ее в мой viewController Файл:

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

, но это не сработало.

У кого-нибудь есть предложения о том, как Я могу это исправить? Я не знаю, что я сделал неправильно или что я забыл сделать.

спасибо большое! BSM

Ответы [ 3 ]

1 голос
/ 27 февраля 2020

Вы можете управлять своей ячейкой с помощью приведенного ниже кода. Не забудьте добавить UICollectionViewDelegateFlowLayout

func collectionView(_ collectionView: UICollectionView,
                layout collectionViewLayout: UICollectionViewLayout,
                sizeForItemAt indexPath: IndexPath) -> CGSize {
// your code here
} 
1 голос
/ 27 февраля 2020

Вам не нужно делать ничего особенного, чтобы выровнять collectionViewCells влево.

Если constraints правильные, cells автоматически начнет рендеринг слева.

class VC: UIViewController, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 1
    }

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

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

Просто установите scrollDirection на vertical или horizontal как согласно вашему требованию в пределах storyboard.

Нет необходимости использовать какую-либо стороннюю библиотеку, чтобы получить эту работу.

enter image description here

1 голос
/ 27 февраля 2020

Попробуйте:

var layout: UICollectionViewFlowLayout = {
    let layout = UICollectionViewFlowLayout()
    layout.scrollDirection = .horizontal
    layout.minimumLineSpacing = 8.0
    layout.minimumInteritemSpacing = 8.0
    let width = (UIScreen.main.bounds.size.width - 40.0) / 4
    layout.estimatedItemSize = CGSize(width: width, height: 98.0)
    return layout
}()

И:

override func viewDidLoad() {
    super.viewDidLoad()
    self.collectionView?.collectionViewLayout = layout
    self.collectionView!.contentInset = UIEdgeInsets(top: 0, left: 0, bottom:0, right: 0)
}

Вам не нужно использовать sizeForItemAt. Если вы хотите больше, вы можете посмотреть мой проект . Проверьте ограничения вашего imageView с его суперпредставлением

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