Изображение эффекта карты IOS Swift обрезается

Ниже приведен мой код для создания CardView и добавления эффекта тени.

 override func awakeFromNib() {
    super.awakeFromNib()
    self.layoutIfNeeded()
    cellBgview.layer.cornerRadius = 15.0
    cellBgview.layer.borderWidth = 1.0
    cellBgview.layer.borderColor = UIColor.clear.cgColor
    cellBgview.layer.shadowColor = UIColor.gray.cgColor
    cellBgview.layer.shadowRadius = 14.0
    cellBgview.layer.shadowOpacity = 0.5
    cellBgview.layer.shadowPath = UIBezierPath(roundedRect: cellBgview.bounds, cornerRadius: cellBgview.layer.cornerRadius).cgPath
    // In
}

Это выглядит так

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

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

cellBgview.clipsToBounds = true

После добавления кода выше это выглядит так

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

Обратите внимание, что после добавления cellBgview.clipsToBounds = true высота карты и тень отсутствуют, но появляется угловой радиус

Как сделать вид карты с угловым радиусом и тенью без клипа изображения.

Также пробовал

cellBgview.layer.masksToBounds = true

Но это не работает.

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


person amodkanthe    schedule 16.01.2020    source источник
comment
Вы пытались добавить MaskToBounds = true?   -  person chirag90    schedule 16.01.2020
comment
да пробовал но не работает   -  person amodkanthe    schedule 16.01.2020
comment
попробуйте предложенное решение   -  person Jawad Ali    schedule 16.01.2020


Ответы (3)


Добавьте еще один UIView в свою ячейку и добавьте imageView в этот UIView... Примените corner radius к imageView. Примените тень к этому UIView, содержащему imageView. добавьте clipsToBounds в imageView, а не в этот UIView, потому что clipsToBounds обрезает все, что находится за пределами границ, что также может быть тенью. решит вашу проблему

person Jawad Ali    schedule 16.01.2020

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

--Cell
  ---UIView //add shadow on this view, also make its backgroundColor to clear color
       ---UIView //add corner radius to this view and clipsToBounds = true for this view
             ---UIImageView
             ---Bottom Labels / Another UIView / Stack View

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

person Er. Khatri    schedule 16.01.2020
comment
вот что я ответил, сэр ... Вам нужно поощрять, если у кого-то уже есть такой же ответ, прежде чем публиковать мой запрос :( - person Jawad Ali; 16.01.2020

Попробуйте это, чтобы получить Shadow, Corner Radius, Border в одном представлении.

cellBgview.backgroundColor = UIColor.white
let cellBgViewLayer = cellBgview.layer()
cellBgViewLayer?.masksToBounds = false
cellBgViewLayer?.shadowColor = UIColor.lightGray.cgColor
cellBgViewLayer?.shadowOpacity = 1.0
cellBgViewLayer?.shadowRadius = 6.0
cellBgViewLayer?.shadowOffset = CGSize(width: 0, height: 0)
cellBgViewLayer?.shouldRasterize = true
cellBgViewLayer?.cornerRadius = 5.0
cellBgViewLayer?.borderColor = UIColor.lightGray.cgColor
cellBgViewLayer?.borderWidth = 1.0
cellBgViewLayer?.shadowPath = UIBezierPath(rect: cellBgview.bounds).cgPath
person emraz    schedule 16.01.2020