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

时间:2019-01-22 23:58:31

标签: ios swift cornerradius

我有一些视图的大小不是硬编码的,而是通过约束确定的,我需要这些视图是圆形的。
有没有办法设置“动态”设置cornerRadius属性,例如取决于对象的实际大小?
我知道,如果此视图位于UIViewController中,则可以通过roundView.frame.width来获取宽度,并在那里设置layer.cornerRadius属性,但是圆形视图不包含在viewController中,而是由另一个简单的UIView管理。
预先谢谢!
戴夫

3 个答案:

答案 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属性设置为该值。