Радиус угла для UIImageView не работает для UICollectionViewCell с динамическим размером

#swift #uicollectionview #uiimage #uicollectionviewcell

#swift #uicollectionview #uiimage #uicollectionviewcell

Вопрос:

У меня есть ячейка, состоящая из UIImageView, высота которой составляет 70% от размера ячейки, а остальные 30% используются меткой.

Ячейки имеют динамический размер, который рассчитывается в соответствии с шириной устройства.

Я убедился, что ячейки квадратные, а UIImageView, содержащийся внутри ячейки, также имеет соотношение 1: 1 для их высоты и ширины

Я устанавливаю радиус угла UIImage в методе делегирования cellForItem представления коллекции

 cell.userImage.layer.cornerRadius = cell.userImage.bounds.width / 2
cell.userImage.clipsToBounds = true
  

Изображение, которое я получаю, это

Итак, кто-нибудь может указать мне правильное направление, почему это происходит?
Когда я должен установить радиус угла изображения в жизненном цикле ячейки?

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

Ответ №1:

попробуйте cell.userImage.layer.maskToBounds = true

Лучше обернуть ImageView внутри UIView . Затем установите свойства UIView bound.size.width/2

Ответ №2:

Вы принимаете ширину «границ». Попробуйте взять ширину / высоту cell.UserImage.

 cell.userImage.layer.cornerRadius = cell.userImage.bounds.width / 2
  

Кроме того, является ли соотношение изображения 1: 1?

Комментарии:

1. Это была ошибка при вставке сюда, в моем коде я правильно использую границы UIImageView …… да, соотношение равно 1: 1

Ответ №3:

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

     ...

    collectionView.delegate = self

    ...

    // then make your view controller confirm to the UICollectionViewDelegateFlowLayout
    // then overide this method like below 
    public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

      CGSize(width: MyLayoutConstants.collectionViewItemWidth,
            height: collectionView.frame.height)
    }
  

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

Комментарии:

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