将 UIView 的角半径自动设置为视图宽度的一半



我有几个视图,它们的大小不是硬编码的,而是通过约束确定的,我需要这些视图是圆形的。
有没有办法"动态"设置 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属性设置为该值。

最新更新