Вопрос по CollcectionView

swift

#1

Доброго дня! Прохожу курс по CollcectionView, приложение с фото собак. Делаю все по уроку, но при присвоении imageView картинки слетают размеры ячеек. Без imageView:

С ImageView:

Констрейнты для imageView установлены. Что можете посоветовать?

Код контроллера:
class PhotosCollectionViewController: UICollectionViewController {
let itemsPerRow: CGFloat = 2 //Коллчичество ячеек в ряду
let sectionInserts = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20) //Отсупы

var photos = [UIImage]()

override func viewDidLoad() {
    super.viewDidLoad()
    createPhotos()
    //Другой вариант задачи layout

// let layout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout
// layout.itemSize = CGSize(width: 70, height: 30)
// layout.sectionInset = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20)
// layout.minimumLineSpacing = 1
// layout.minimumInteritemSpacing = 1

}


// MARK: UICollectionViewDataSource

override func numberOfSections(in collectionView: UICollectionView) -> Int {
    // #warning Incomplete implementation, return the number of sections
    return 1
}


override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of items
    return photos.count
}

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

    cell.dogImageView.image = photos[indexPath.item]
    // Configure the cell
    cell.backgroundColor = .black

    return cell
}

func createPhotos() {
    for i in 1...15 {
        guard let image = UIImage(named: "dog\(i)") else {return}
        photos.append(image)
    }
}

}

extension PhotosCollectionViewController: UICollectionViewDelegateFlowLayout {

//Определяет размер ячеек
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    
    let peddingWidth = sectionInserts.left * (itemsPerRow + 1) //Длина всех отступов в ряду, для 2 ячеек = 3*20=60
    let availableWidth = collectionView.frame.width - peddingWidth //Доступная ширина
    let widthPerItem = availableWidth / itemsPerRow //ширина одного объекта
    return CGSize(width: widthPerItem, height: widthPerItem)
}

//Устанавливает границы для ячеек
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
    return sectionInserts
}

//Устанавливает отсупы между линиями
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
    return sectionInserts.left
}

//Устанавливает растояние между самими объектами
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
    return sectionInserts.left
}

}


[РЕШЕНО] UICollectionView - ImageView приобретает размеры исходной картинки, а не размеры из кода
[РЕШЕНО] UICollectionView - ImageView приобретает размеры исходной картинки, а не размеры из кода
Картинка по заданию 4 курса растягивается на весь экран
#2

Проверьте констрейнты у imageView, что бы они были все по 0 к краям ячейки.

Вот мой код для расположения ячеек

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

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

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

    return CGSize(width: width/itemsPerRow - 0.5, height: width/itemsPerRow - 0.5)
}

#3

Проверил отступы - все установлены. Ваш код дал тот же результат.


#4

а .contentMode у вас какой стоит на ImageView?


#5

Content mode - Aspect fill


#6

Собственно сам проект https://github.com/AntonKovalkov/swiftbook.git


#7

#8

Спасибо, разобрался. Надо было изменить Estimate Size