为啥视图的阴影被创建为内部

Posted

技术标签:

【中文标题】为啥视图的阴影被创建为内部【英文标题】:Why shadow of a view is created as inner为什么视图的阴影被创建为内部 【发布时间】:2017-08-19 20:02:27 【问题描述】:

我尝试创建视图的标准阴影,我将其创建为 cell.contantView 的子视图,但如果我没有指定 .shadowPath,阴影将应用于视图中的其他项目(视图除外),或者阴影创建为如果我这样做,内在。

cell.cellView.frame = CGRect(x: 0.0, y: 0.0, width: cell.contentView.bounds.width, height: initialCellHeight)

cell.cellView.layer.shadowColor = UIColor.black.cgColor
cell.cellView.layer.shadowRadius = 2
cell.cellView.layer.shadowOffset = CGSize.zero
cell.cellView.layer.shadowOpacity = 1
cell.cellView.layer.masksToBounds = false
cell.cellView.layer.shadowPath = UIBezierPath(rect: cell.cellView.bounds).cgPath

cell.contentView.addSubview(cell.cellView)

请帮忙,我花了一整天的时间试图解决这个问题。

【问题讨论】:

为什么要再次将 cell.cellView 添加为 contentView 的子视图? 您是否已将其他项目添加到您想要拥有阴影或单元格的视图中? 带单元格的阴影非常棘手,因为您无法控制渲染顺序(它们的 z-index)。 1.再次?我不。我在最后只添加了一次......也许我不明白一些东西...... 2.是的,我已经添加了,但我不想它有阴影。 3.我尝试设置zPosition,但它甚至没有影响显示阴影。 【参考方案1】:

^ 您可以添加和 UIView 具有您的单元格的所有子视图

^ 然后在前一个 UIView 下添加另一个 UIView 仅用于 Shadow 例如。阴影层

cell.shadowLayer.layer.masksToBounds = false
cell.shadowLayer.layer.shadowOffset = CGSizeMake(0, 0)
cell.shadowLayer.layer.shadowColor = UIColor.blackColor().CGColor
cell.shadowLayer.layer.shadowOpacity = 0.23
cell.shadowLayer.layer.shadowRadius = 4

【讨论】:

是cell.contantView,不是吗? 我们已经有了主视图——contantView。我还删除了 cell.cellView 中的所有内容(我以为没有设置 shadowPath 和没有视图的内容我会得到正常的阴影),但是视图的阴影完全消失了。

以上是关于为啥视图的阴影被创建为内部的主要内容,如果未能解决你的问题,请参考以下文章

在 uitextfield 和 uitextview 上添加内阴影

为啥masksToBounds = YES会阻止CALayer阴影?

在 iOS 7 下运行我的 iOS 6 应用程序时,为啥我的视图上没有正确显示阴影?

为啥我的3Dmax渲染不出来阴影?

为笔尖启动的视图添加边框和阴影

为具有圆角的UIImageView创建阴影?