Как показать коллекциюПросмотреть, как изображение для загрузки в Facebook, используя swift 4? - PullRequest
0 голосов
/ 30 апреля 2018

enter image description hereenter image description here

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

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
     let yourWidth = (collectionView.bounds.width - 4) / 3.0
     let yourHeight = yourWidth
     return CGSize(width: yourWidth, height: yourHeight)
}

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Ваш ответ в вашем вопросе, если не хватает условий

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

        switch indexPath.item {
        case 0,1:
            return CGSize(width: (UIScreen.main.bounds.width - 16) / 2, height: (UIScreen.main.bounds.width - 16) / 2)
        default:
            return CGSize(width: (UIScreen.main.bounds.width - 32) / 3, height:  (UIScreen.main.bounds.width) / 3)
        }
    }
0 голосов
/ 30 апреля 2018

Если это то, что вы ищете, то это довольно легко сделать с UICollectionViewFlowLayout

End Result

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

Ваш контроллер должен соответствовать UICollectionViewDelegateFlowLayout протоколу

В моем тестовом приложении я сделал следующее:

override func viewDidLoad() {
    let layout = UICollectionViewFlowLayout()
    layout.minimumLineSpacing = 5
    layout.minimumInteritemSpacing = 5
    let collectionView = UICollectionView(frame: view.bounds, collectionViewLayout: layout)
    collectionView.delegate = self
    collectionView.dataSource = self
    collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "ident")

    view.addSubview(collectionView)
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let item = indexPath.item
    let width = collectionView.bounds.size.width
    let padding:CGFloat = 5
    if item < 2 {
        let itemWidth:CGFloat = (width - padding) / 2.0
        return CGSize(width: itemWidth, height: itemWidth)
    } else {
        let itemWidth:CGFloat = (width - 2 * padding) / 3.0
        return CGSize(width: itemWidth, height: itemWidth)
    }
}

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

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