Самостоятельное изменение размера изображений в ячейке представления коллекции

Я хочу добавить фотографии в одну из ячеек представления моей коллекции, как это делает Snapchat ...

введите здесь описание изображения

Есть всего два основных требования:

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

  2. Каждая фотография должна сохранять свое соотношение сторон.

Моя первоначальная мысль заключалась в том, чтобы отобразить массив изображений, и прямо перед удалением ячейки из очереди вычислить размер каждой ячейки, сохраняя его соотношение сторон, а затем использовать эти данные для представления изображений внутри представления коллекции внутри ячейки. Однако мои результаты отсутствуют.

Кажется, что изображения имеют размер правильно, однако макет изображения, обрабатываемый UICollectionViewFlowLayout, не размещает изображения должным образом.

введите здесь описание изображения  введите описание изображения здесь

Вот метод расчета размеров.

func calculateImageSize(images: [UIImage], bounds: CGRect) -> [CGSize] {

    var imageSizes: [CGSize] = []

    var imageWidth: Int!
    var imageHeight: Int!
    var aspectRatio: CGSize!
    var convertedRect: CGRect!

    for i in 0..<images.count {

        imageWidth = images[i].cgImage?.width
        imageHeight = images[i].cgImage?.height

        aspectRatio = CGSize(width: imageWidth, height: imageHeight)
        convertedRect = AVMakeRect(aspectRatio: aspectRatio, insideRect: bounds)

        imageSizes.append(CGSize(width: convertedRect.width, height: convertedRect.height))
    }
return imageSizes
}

Минимальный интервал между строками и элементами устанавливается равным нулю.

Какие-либо предложения?




Ответы (1)


Не думаю, что дело в размере изображения. Это макет, который вам нужно настроить. Я быстро поискал и нашел эту библиотеку, которая может помочь: https://github.com/rubygarage/collection-view-layouts

person drekka    schedule 31.10.2018
comment
Я думал, что UICollectionViewFlowLayout может справиться с макетом, поскольку это довольно просто. Если для элемента в строке нет места, переместите его в следующую строку, и это действительно так, но я не понимаю, почему расстояние между элементами меняется, когда это происходит. Есть предположения? - person Stefan; 31.10.2018