【问题标题】:Tableview Xib Shadow SwiftTableview Xib 阴影 Swift
【发布时间】:2019-01-01 12:59:43
【问题描述】:

这是我想要做的:

截图来自Iphone:

这是我的代码:

cell.shadowLayerView.layer.masksToBounds = false
cell.shadowLayerView.layer.shadowOffset = CGSize(width: 0, height: 0)
cell.shadowLayerView.layer.shadowColor = UIColor.black.cgColor
cell.shadowLayerView.layer.shadowOpacity = 0.23
cell.shadowLayerView.layer.shadowRadius = 4
cell.shadowLayerView.layer.shadowPath = UIBezierPath(roundedRect: cell.shadowLayerView.bounds, cornerRadius: 2).cgPath
cell.shadowLayerView.layer.shouldRasterize = true
cell.shadowLayerView.layer.rasterizationScale = UIScreen.main.scale
cell.discriptionLbl.frame.size.width = UIScreen.main.bounds.size.width

这是我的 tableview xib。在原始图像中显示所有侧面(上,下,左,右)的浅灰色阴影,但在拍摄的图像中显示所有侧面阴影,但为什么在右侧和底部显示额外的阴影。

见下图:

问题:如何从视图的各个侧面显示与原始图像相同的阴影(浅灰色阴影)?

谁能告诉我如何解决这个问题,我已经尝试解决这个问题但还没有结果。

任何帮助将不胜感激。

提前致谢。

【问题讨论】:

  • 不鼓励仅提供链接作为答案。如果页面移动,链接可能会中断。请考虑解释您提供的答案的基础知识,因为我们不是在这里进行 OP 可以自己进行的基本搜索。
  • 设置单元格内容视图的阴影
  • 更新问题请查看并给我解决方案。

标签: ios css swift uitableview


【解决方案1】:

见以下代码:

mainViewCorner.layer.shadowColor = UIColor.red.cgColor;
mainViewCorner.layer.shadowOffset = CGSize.zero //direction of shadow
mainViewCorner.layer.shadowOpacity = 1.0; // opacity for shadow
mainViewCorner.layer.shadowRadius = 0.0; //amount of shadow to blur
mainViewCorner.layer.cornerRadius = 4.0;

您的代码存在问题shadowOffset。它定义了阴影的方向。如果您想要所有侧面的阴影 - 它的宽度和高度都必须为零。

【讨论】:

  • @Sam :你看过我的回答了吗,我已经解释过了,shadowOffset 定义了你的影子的方向。所以,如果你想让阴影在所有方向上都相等,那么shadowOffset 必须是 CGSize.zero
  • 在你尝试过的 - 请删除shadowPath,因为你同时使用shadowPath和shadowOffset,它会发生冲突
  • 是的@Mehul,你是对的,你解决了我的问题,非常感谢,当我尝试 CGSize(width: 0.0, height: 0.0) 和 cgsize.zero 不一样时请解释一下?//跨度>
  • 这个问题你可以看到Dipen的答案(别忘了在他提供的代码中阅读cmets,否则不起作用):stackoverflow.com/questions/36173052/…,
  • 是的,两个 cgsize 都是一样的,用户看哪个更好。两者都是一样的。 @山姆
【解决方案2】:

试试看

   myView.layer.cornerRadius = 10
   let shadowPath = UIBezierPath(roundedRect: myView.bounds, cornerRadius: 10)

    myView.layer.masksToBounds = false
    myView.layer.shadowColor = UIColor.gray.cgColor
    myView.layer.shadowOffset = CGSize(width: 0, height: 2)
    myView.layer.shadowOpacity = 0.5

或者你可以使用素描阴影

extension CALayer {
    func applySketchShadow(
        color: UIColor = .black,
        alpha: Float = 0.5,
        x: CGFloat = 0,
        y: CGFloat = 2,
        blur: CGFloat = 4,
        spread: CGFloat = 0)
    {
        shadowColor = color.cgColor
        shadowOpacity = alpha
        shadowOffset = CGSize(width: x, height: y)
        shadowRadius = blur / 2.0
        if spread == 0 {
            shadowPath = nil
        } else {
            let dx = -spread
            let rect = bounds.insetBy(dx: dx, dy: dx)
            shadowPath = UIBezierPath(rect: rect).cgPath
        }
    }
}

应用素描阴影

 myView.layer.cornerRadius = 10
        let shadowPath = UIBezierPath(roundedRect: myView.bounds, cornerRadius: 10)

   myView.layer.applySketchShadow(
            color: .black, 
            alpha: 0.5, 
            x: CGFloat(0), 
            y: CGFloat(10), 
            blur: 20, 
            spread: 0)
        myView.layer.shadowPath = shadowPath.cgPath

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 2020-05-18
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多