Как сделать ячейку представления коллекции более чем одним столбцом? - PullRequest
0 голосов
/ 08 мая 2020

Здесь вывод кода, но я хочу превратить его в 2 столбца

Я хочу создать представление коллекции с более чем 1 столбцом, но этот код показывает только один столбец. Может ли кто-нибудь помочь мне, как это исправить ??? Спасибо ....

import UIKit

class SearchViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {


    @IBOutlet weak var collectionView: UICollectionView!

Здесь массив

    var collectionArray : [String] = ["1", "2", "3", "4"]


    let labelnamee = [("Long Sleeve Abstract Print Top"), ("Logo Graphic Print Top"), ("Material Study T-Shirt"), ("Mission Statement Print T-Shirt"), ("Printed Logo T-Shirt"), ("Tie-Dye Print T-Shirt")]

    let labelpricee = [("RM 1021"), ("RM 860"), ("RM 750"), ("RM 750") , ("RM 670"), ("RM 760")]

    let imagee = [UIImage(named: "abstractprint"),
                   UIImage(named: "longsleeve"),UIImage(named: "studymaterial"),UIImage(named: "mission"), UIImage(named: "white"), UIImage(named: "tiedye")]

    override func viewDidLoad() {
        super.viewDidLoad()

        collectionView.delegate = self
        collectionView.dataSource = self

    }

    func numberOfSections(in collectionView: UICollectionView) -> Int {
        return 1
    }

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

для границы ячейки коллекции

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionViewCell
        let cellIndex = indexPath.item
        cell.imageView.image = imagee[cellIndex]
        cell.labelname.text = labelnamee[cellIndex]
        cell.labelprice.text = labelpricee[cellIndex]

        cell.contentView.layer.cornerRadius = 10
        cell.contentView.layer.borderWidth = 1.0
        cell.contentView.layer.borderColor = UIColor.blue.cgColor
        cell.backgroundColor = UIColor.white

        cell.layer.shadowColor = UIColor.gray.cgColor
        cell.layer.shadowOffset = CGSize(width: 0.0, height: 2.0)
        cell.layer.shadowRadius = 2.0
        cell.layer.shadowOpacity = 1.0
        cell.layer.masksToBounds = false
        cell.layer.shadowPath = UIBezierPath(roundedRect: cell.bounds, cornerRadius: cell.contentView.layer.cornerRadius).cgPath

        return cell
    }

}

Вот код для макета. Кажется, я ошибся в росте или весе ..

extension SearchViewController : 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 bounds = collectionView.bounds
        let heigtVal = self.view.frame.height
        let widthVal = self.view.frame.width
        let cellsize = (heigtVal < widthVal) ? bounds.height/2: bounds.width/2



        return CGSize(width: cellsize - 10, height: cellsize - 10)
    }

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

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

1 Ответ

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

Если ширина ячейки или содержимое ячеек таковы, что collectionView не может вместить возможность видеть их в видимой части экрана, представление коллекции автоматически помещается рядом с ними. Вы должны прокрутить свой CollecctionView, чтобы увидеть следующий столбец.

Если вы хотите увидеть два столбца в видимой части экрана, пожалуйста, выполните следующие действия:

Сначала поместите все ваши представления внутри StackView и выровняйте их по вертикали.

enter image description here

Затем установите правильные width и height ограничения для вашего imageView, чтобы сохранить соотношение сторон для вашего требования. Я установил, как показано ниже, чтобы продемонстрировать:

enter image description here

Наряду с указанными выше ограничениями я также установил размер ячейки автоматически c в раскадровке. сам, а не программно. Удалено sizeForItemAt indexPath из кода

: enter image description here

Наконец, после выполнения всех вышеперечисленных шагов результат выглядел так:

enter image description here

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