微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在某些UI元素上看不到阴影

如何解决在某些UI元素上看不到阴影

我有一个帮助程序方法,可以帮助我在所有UI元素上添加阴影,并且对大多数元素都适用,但是对某些元素却不是。
例如,在下面的这个stackView上,运行我的应用程序时没有阴影:

    var container = UIStackView()
    let stackView = UIStackView(arrangedSubviews: [button1,button2,button3])
            stackView.axis = .vertical
            stackView.distribution  = .equalSpacing
            stackView.alignment = .fill
            
            container = stackView
            self.view.addSubview(container)
            
            container.snp.makeConstraints { make in
                make.top.equalTo(view).offset(25)
                make.right.equalTo(view).offset(-25)
                make.width.equalTo(view.frame.width * 0.185)
                make.height.equalTo(view.frame.width * 0.65)
            }
            container.layer.addShadow()

我也曾尝试为我的按钮(button1,button2,button3)调用addShadow(),但是没有用。
我在addShadow()的参数中尝试了不同的值,但是...

一个示例是在我的imageView上 WORKS 的地方:

let avatarImageView = UIImageView()
self.addSubview(avatarImageView)
        avatarImageView.contentMode = .scaleAspectFit
        avatarImageView.image = UIImage(named: imageName)
        avatarImageView.snp.makeConstraints { (make) in
            make.height.equalToSuperview()
            make.width.equalToSuperview().multipliedBy(0.5)
            make.left.equalToSuperview()
        }
        avatarImageView.layer.addShadow(opacity: 0.3,offsetWidth: 13,offsetHeight: 8)

这是一个影子方法(在CALayer的扩展中):
func addShadow(scale: Bool = true,opacity: Float = 0.4,offsetWidth: Int = 5,offsetHeight: Int = 5,radius: CGFloat = 5) {
        masksToBounds = false
        shadowColor = UIColor.black.cgColor
        shadowOpacity = opacity
        shadowOffset = CGSize(width: offsetWidth,height: offsetHeight)
        shadowRadius = radius
        shouldRasterize = true
        rasterizationScale = scale ? UIScreen.main.scale : 1
    }

解决方法

请参阅Apple的UIStackView documentation

管理堆栈视图的外观:
UIStackView是UIView的非呈现子类。

UIStackView仅管理其排列的视图的位置和大小,背景或阴影不会显示。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。