UIStackView中没有显示阴影

12

我想给一个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
    }
}

但阴影没有出现。


请查看您的UIStackView的clipToBounds属性。 - Reinier Melian
1
你尝试过不设置那么大的shadowOffset吗?试着设置CGSize(width:1,height:1)进行测试。 - Aleksandr Honcharov
@ReinierMelian,clipToBounds已经被选中。 - Share Knowledge
@AlexanderGoncharov,我尝试了你的建议,但它对我没有起作用。 - Share Knowledge
制作另一个具有透明背景的背景视图,并向其添加阴影。 - Aleksandr Honcharov
@ShareKnowledge,请检查Sahil提供的答案,似乎是正确的答案。 - Reinier Melian
1个回答

26
您无法这样做是因为 UIStackView 是一个不绘制视图,这意味着 drawRect() 永远不会被调用,并且其背景颜色会被忽略。请考虑将 UIStackView 放置在另一个 UIView 中并给该视图设置背景颜色。
来自 Apple 文档

UIStackViewUIView 的一个非渲染子类,即它本身没有任何用户界面。相反,它只管理其排列视图的位置和大小。因此,一些属性(如 backgroundColor)对堆栈视图没有影响。同样,您不能覆盖 layerClassdraw(:)draw(:in:)


2
Sahil上面说的完全正确,但是有一些技巧可以解决这个问题。尝试这种方法:https://useyourloaf.com/blog/stack-view-background-color/ - Mauricio Chirino

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接