我有一些视图的大小不是硬编码的,而是通过约束确定的,我需要这些视图是圆形的。
有没有办法设置“动态”设置cornerRadius属性,例如取决于对象的实际大小?
我知道,如果此视图位于UIViewController中,则可以通过roundView.frame.width
来获取宽度,并在那里设置layer.cornerRadius属性,但是圆形视图不包含在viewController中,而是由另一个简单的UIView管理。
预先谢谢!
戴夫
答案 0 :(得分:4)
您可以重写View类的layoutSubviews方法,并在那里设置cornerRadius值。假设您希望cornerRadius为视图宽度的一半:
override func layoutSubviews() {
super.layoutSubviews()
self.layer.cornerRadius = self.bounds.width * 0.5
}
答案 1 :(得分:1)
通过观察“密钥路径”,可以轻松地通过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
}()
答案 2 :(得分:0)
只需通过包含它们的简单视图即可访问它们。如果您的简单容器视图没有这些圆形视图作为实例,则可以通过迭代其子视图数组来访问它们。 当您掌握该视图时,可以访问其frame.size.width并将layer.corner radius属性设置为该值。