如何将圆角半径添加到 UIStackView 并屏蔽子视图
How to add corner radius to UIStackView and mask subviews
我为 UIStackView
使用了一个简单的子类来为其添加背景颜色:
func backgroundColor(_ color: UIColor?) {
backgroundView.backgroundColor = color
}
func cornerRadius(_ radius: CGFloat) {
backgroundView.clipsToBounds = true
backgroundView.layer.cornerRadius = radius
}
问题是使用自定义视图作为容器的圆角半径不会遮盖 arrangedSubviews
。我试图通过覆盖 addArrangedSubview
方法来解决这个问题:
override func addArrangedSubview(_ view: UIView) {
super.addArrangedSubview(view)
view.mask = backgroundView
}
但它会产生奇怪的东西并向控制台发送垃圾邮件:
- changing property mask in
transform-only layer, will have no effect
除了将背景添加到堆栈视图之外,您还可以将堆栈视图作为子视图添加到背景并用角遮盖背景。
let wrapper = UIView() // Creating background
wrapper.layer.cornerRadius = 10
wrapper.layer.masksToBounds = true
wrapper.backgroundColor = .yellow
let stack = UIStackView() // Creating stack
stack.frame = wrapper.bounds
stack.autoresizingMask = [.flexibleWidth, .flexibleHeight]
wrapper.addSubview(stack)
我为 UIStackView
使用了一个简单的子类来为其添加背景颜色:
func backgroundColor(_ color: UIColor?) {
backgroundView.backgroundColor = color
}
func cornerRadius(_ radius: CGFloat) {
backgroundView.clipsToBounds = true
backgroundView.layer.cornerRadius = radius
}
问题是使用自定义视图作为容器的圆角半径不会遮盖 arrangedSubviews
。我试图通过覆盖 addArrangedSubview
方法来解决这个问题:
override func addArrangedSubview(_ view: UIView) {
super.addArrangedSubview(view)
view.mask = backgroundView
}
但它会产生奇怪的东西并向控制台发送垃圾邮件:
- changing property mask in transform-only layer, will have no effect
除了将背景添加到堆栈视图之外,您还可以将堆栈视图作为子视图添加到背景并用角遮盖背景。
let wrapper = UIView() // Creating background
wrapper.layer.cornerRadius = 10
wrapper.layer.masksToBounds = true
wrapper.backgroundColor = .yellow
let stack = UIStackView() // Creating stack
stack.frame = wrapper.bounds
stack.autoresizingMask = [.flexibleWidth, .flexibleHeight]
wrapper.addSubview(stack)