Как вписать изображение в коллекцию? - PullRequest
2 голосов
/ 30 марта 2020

В настоящее время у меня есть изображение ниже:
enter image description here

Я хотел бы вставить изображение в контейнер. но когда я запускаю этот код

//MARK: - UICollectionViewDataSource protocol

// tell the collection view how many cells to make
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return self.items.count
}
//make a cell for each cell index path
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    //get  a reference to our storyboard cell
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! AppIconViewCell

    // Use the outlet in our custom class to get a reference to the UILabel in the cell
    cell.myLabel.text = self.items[indexPath.item]
    cell.ImageView.image = UIImage.init(named: "page-01")

    //cell.backgroundColor = UIColor.cyan
    cell.layer.borderColor = UIColor.black.cgColor
    cell.layer.borderWidth = 1
    cell.layer.cornerRadius = 8

    return cell
}

, результат таков:
enter image description here

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

Как я могу установить изображение внутри так, чтобы оно помещалось в рамку на первом изображении?

Ответы [ 3 ]

1 голос
/ 30 марта 2020

Добро пожаловать в Stackoverflow.

Для этого вам необходимо добавить явное ограничение height и width . Я предполагаю, что у вас есть правильный размер для возврата в методе sizeForItemAt.

Наконец, не забудьте установить cell или ImageView clipsToBounds на true.

0 голосов
/ 30 марта 2020

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

Я предполагаю, что ячейка будет квадратной, и между каждой ячейкой и каждой строкой будет промежуток в 10 пикселей (так минимальный межстрочный интервал и межэлементный интервал будут 10)

    let cellGap = 10
    let leftGapToScreen = 10
    let rightGapToScreen = 10
    let minLineSpacing = 10
    let minInterItemSpacing = 10

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let availableWidth = UIScreen.main.bounds.width - (2 * cellGap) - 
    leftGapToScreen - rightGapToScreen
    let cellWidth = availableWidth / 3
    let cellHeight = cellWidth
    return CGSize(width: cellWidth, height: cellHeight)
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
    return UIEdgeInsets(top: 0, left: leftGapToScreen, bottom: 0, right: rightGapToScreen)
}

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

Теперь создайте собственный collectionViewCell и поместите в него imageView. Используйте автоматическую компоновку, чтобы изображение целиком вписывалось в супер вид. Надеюсь, это поможет.

0 голосов
/ 30 марта 2020

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

           cell.ImageView.image = UIImage.init(named: "page-01")
            cell.ImageView.contentMode = .scaleAspectFill
            cell.clipsToBounds = true

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

https://developer.apple.com/documentation/uikit/uiview/1622619-contentmode

...