首页 > 解决方案 > 具有动态内容的 tableview 上的 Swift 阴影

问题描述

我在表格视图上有阴影的动态内容有问题

我有一个扩展角半径和阴影

extension UIView {

func roundCorners(_ corners: UIRectCorner, radius: CGFloat) {
    let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
    let mask = CAShapeLayer()
    mask.path = path.cgPath

    self.layer.mask = mask

    let shadowLayer = CAShapeLayer()
    shadowLayer.path = path.cgPath
    shadowLayer.frame = self.frame

    shadowLayer.shadowOpacity = 0.4
    shadowLayer.shadowRadius = 2
    shadowLayer.shadowColor = UIColor.black.cgColor
    shadowLayer.shadowOpacity = 0.13
    shadowLayer.shadowRadius = 6
    shadowLayer.shadowOffset = CGSize(width: 0, height: 3)

    self.superview!.layer.insertSublayer(shadowLayer, below: self.layer)
    }
}

而这个 id MyCustomTableViewCell

override func awakeFromNib() {
    super.awakeFromNib()

    bg_view.roundCorners([.topLeft, .topRight, .bottomRight, .bottomLeft], radius: 9)
}

这是我的结果(文本是“这是我在表格上的数据”)

我目前的结果

我也用

activity_table.rowHeight = UITableView.automaticDimension
activity_table.estimatedRowHeight = 100

并将行设置为0

标签: iosswiftxcode

解决方案


我又玩了一些。你让这种方式比它需要的更复杂。我能够在不需要子层的情况下解决这个问题。

class Cell: UITableViewCell {
    @IBOutlet weak var label: UILabel!
    @IBOutlet weak var containerView: UIView!

    override func awakeFromNib() {
        super.awakeFromNib()
        containerView.layer.cornerRadius = 9
        containerView.layer.shadowColor = UIColor.black.cgColor
        containerView.layer.shadowOpacity = 0.13
        containerView.layer.shadowRadius = 6
        containerView.layer.shadowOffset = CGSize(width: 0, height: 3)
    }
}

containerView 只是一个包含标签的子视图。现在,使用 containerView,您可以调整阴影和圆角。

您可以在此处查看完整的解决方案。

唯一需要确定的是containerView的背景颜色不清晰。如果是这样,您将看到一些奇怪的副作用,其中阴影传播到文本标签。


推荐阅读