[英]Swift UITableViewCell Shadow not appearing
我正在尝试创建在我的其他 UIViewControllers 中正常工作的自定义表格视图单元格。 但是,在我的一个控制器中,阴影没有增长,我几乎看不到阴影。
这是阴影显示为红色的图像,您可以看到它几乎不可见。
我的单元格在 contentView 中添加了一个 UIView 以创建浮动单元格效果 - 相同的代码和相同的 storyboard 布局正在我的控制器中使用,但这是唯一发生阴影问题的表格视图 - 所以我必须遗漏一些东西。
我的addShadow
扩展:
extension UIView {
func addShadow(offset: CGSize, color: UIColor, radius: CGFloat, opacity: Float) {
layer.masksToBounds = false
layer.shadowOffset = offset
layer.shadowColor = color.cgColor
layer.shadowRadius = radius
layer.shadowOpacity = opacity
}
}
我在自定义单元格上的awakeFromNib
:
:: cellContentView
是我的 UIView 添加到单元格的基本contentView
中。
override func awakeFromNib() {
super.awakeFromNib()
self.backgroundColor = .clear
self.selectionStyle = .none
cellContentView?.layer.masksToBounds = true
cellContentView?.round(corners: [.topLeft, .topRight, .bottomLeft, .bottomRight], radius: 10)
cellContentView?.addShadow(offset: CGSize(width: 40, height: 60), color: UIColor.red, radius: 10, opacity: 1)
cellContentView?.layer.shouldRasterize = true
}
注意: .round
是我所有单元格上使用的扩展名。
无论我为这个阴影添加什么半径或偏移量,它都不会比图像大。 此外,我的控制器中的其他单元都不需要设置shouldRasterize
属性,但确实如此。
有谁知道这里发生了什么? 谢谢:)
奇怪的是,如果我在视图周围添加约束以保持视图和单元格内容视图之间的间隙较大,则背景颜色会消失 - 在 storyboard 中设置为白色。
您应该调用 layoutSubviews 方法。 因为在视图上传后应该添加阴影
override func awakeFromNib() {
super.awakeFromNib()
//init methods
}
override public func layoutSubviews() {
super.layoutSubviews()
//Added shadow
self.reloadLayers()
}
private func reloadLayers() {
self.layer.cornerRadius = 5
self.addShadow(.TransactionCell)
}
我希望它有帮助
内容视图将填充您的单元格,因此您需要在内容视图中添加阴影以查看其中包含所有组件的内容。 然后在该视图和内容视图之间添加约束。 其次,阴影的 40 和 60 属性可能太大了,当我说太大时,我的意思是难以置信的大,因为单元格中内容视图之间的差距不超过 15 - 30 甚至更小。 所以尝试使用更少的值,虽然半径可以保持 10,但你会看到最适合的值。 如果单元格内容视图是您的自定义视图,如果您的视图不是透明的或其中的任何内容,那么值将完成这项工作,在这种情况下它不会,并且很难解决这个问题,我尝试了许多库和自定义代码它永远不会好。
squircleView.layer.cornerRadius = 40
squircleView.layer.cornerCurve = CALayerCornerCurve.continuous
squircleView.layer.shadowColor = UIColor.systemGray.cgColor
squircleView.layer.shadowOpacity = 0.7
squircleView.layer.shadowOffset = CGSize(width: 0, height: 0.5)
squircleView.layer.shadowRadius = 5
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.