IOS Swift 卡片效果图像被剪裁
IOS Swift card effect image is getting clipped
以下是我创建 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 = 真卡高程和阴影丢失但角半径出现
如何在没有图像获取剪辑的情况下制作带有圆角半径和阴影的卡片视图。
也试过
cellBgview.layer.masksToBounds = true
但它不起作用。
在您的单元格中添加另一个 UIView
,并在 UIView
中添加 imageView
...将 corner radius
应用于 imageView
。将阴影应用于持有 imageView 的 UIView。将 clipsToBounds 添加到 imageView
而不是 UIView
因为 clipsToBounds
剪辑边界外的任何东西也可以是阴影。将解决您的问题
在您的单元格中添加一个 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
此层次结构将帮助您仅在顶部实现图像圆角并在底部内容上查看圆角
试试这个在一个视图中实现阴影、圆角半径、边框。
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
以下是我创建 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 = 真卡高程和阴影丢失但角半径出现
如何在没有图像获取剪辑的情况下制作带有圆角半径和阴影的卡片视图。
也试过
cellBgview.layer.masksToBounds = true
但它不起作用。
在您的单元格中添加另一个 UIView
,并在 UIView
中添加 imageView
...将 corner radius
应用于 imageView
。将阴影应用于持有 imageView 的 UIView。将 clipsToBounds 添加到 imageView
而不是 UIView
因为 clipsToBounds
剪辑边界外的任何东西也可以是阴影。将解决您的问题
在您的单元格中添加一个 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
此层次结构将帮助您仅在顶部实现图像圆角并在底部内容上查看圆角
试试这个在一个视图中实现阴影、圆角半径、边框。
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