UIStackView没有显示阴影

时间:2017-08-30 13:09:16

标签: ios swift shadow custom-cell uistackview

我试图给UIStackView留下阴影。我的stackview在原型单元中有一些标签和按钮。 首先,我在一个捆绑到我的自定义单元格的类中引用了名为 UIViewBank 的stackview:

class CustChatBankCell: UITableViewCell {

    @IBOutlet weak var UIViewBank: UIStackView!
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}

在我的控制器中,我正在使用扩展名:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell:CustChatBankCell = self.tbChat.dequeueReusableCell(withIdentifier: "CustomBankCell") as! CustChatBankCell
                    cell.UIViewBank.dropShadow()
                    return cell
                }
}

分机代码:

extension UIStackView {

    func dropShadow(scale: Bool = true) {

        self.layer.masksToBounds = false
        self.layer.shadowColor = UIColor.black.cgColor
        self.layer.shadowOpacity = 0.5
        self.layer.shadowOffset = CGSize(width: -1, height: 501)
        self.layer.shadowRadius = 1

        self.layer.shadowPath = UIBezierPath(rect: self.bounds).cgPath
        self.layer.shouldRasterize = true
        self.layer.rasterizationScale = scale ? UIScreen.main.scale : 1
    }
}

但阴影没有出现。

1 个答案:

答案 0 :(得分:12)

您无法执行此操作,因为UIStackView是非绘图视图,这意味着永远不会调用drawRect()并忽略其背景颜色。考虑将UIStackView放在另一个UIView内,并为该视图提供背景颜色。

来自Apple Docs

  

UIStackView是一个非渲染的子类   的UIView   ;也就是说,它不提供自己的任何用户界面。相反,它只管理其排列视图的位置和大小。结果,一些属性(如   背景颜色   )对堆栈视图没有影响。同样,你不能覆盖   layerClass   ,   绘制( :)   ,或画画(:in:)。