问题描述
我有一个帮助程序方法,可以帮助我在所有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
仅管理其排列的视图的位置和大小,背景或阴影不会显示。