簡體   English   中英

自動將 UIView 的角半徑設置為視圖寬度的一半

[英]Set UIView's corner radius to half of the view's width automatically

我有一些視圖的大小不是硬編碼的,而是通過約束確定的,我需要這些視圖是圓形的。
有沒有辦法“動態”設置cornerRadius 屬性,例如根據對象的實際大小?
我知道如果這個視圖在 UIViewController 中,我可以通過roundView.frame.width獲取寬度並在那里設置 layer.cornerRadius 屬性,但是圓形視圖不包含在 viewController 中,而是由另一個簡單的 UIView 管理。
先感謝您!
戴夫

您可以覆蓋 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 屬性設置為該值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM