我有几个视图,它们的大小不是硬编码的,而是通过约束确定的,我需要这些视图是圆形的。
有没有办法"动态"设置 cornerRadius 属性,例如根据对象的实际大小?
我知道如果这个视图在UIViewController内,我可以通过roundView.frame.width
获取宽度并在那里设置layer.cornerRadius属性,但圆形视图不包含在viewController中,而是由另一个简单的UIView管理。
提前谢谢你!
Dave
您可以覆盖 View 类的 layoutSubviews 方法,并在那里设置 cornerRadius 值。假设您希望 cornerRadius 是视图宽度的一半:
override func layoutSubviews() {
super.layoutSubviews()
self.layer.cornerRadius = self.bounds.width * 0.5
}
通过观察 Key Path 使用 RxSwift 轻松实现这一点。
extension UIView{
func cornerHalf(){
clipsToBounds = true
rx.observe(CGRect.self, #keyPath(UIView.bounds))
.subscribe(onNext: { _ in
self.layer.cornerRadius = self.bounds.width * 0.5
}).disposed(by: rx.disposeBag)
}
}
只需调用init
方法,代码似乎通过声明更简单,而不是分布在两个地方。特别是,逻辑通常在您的项目中进行阐述。
像这样打电话:
let update: UIButton = {
let btn = UIButton()
// more config
btn.cornerHalf()
return btn
}()
只需通过包含它们的简单视图访问它们即可。如果简单容器视图没有这些圆视图作为实例,则可以通过循环访问其子视图数组来访问它们。 当您掌握视图时,您可以访问其frame.size.width并将layer.corner radius属性设置为该值。