如何快速正确计算XIB的corneRadius

问题描述

无法为此 xib 的圆角设置计算值。仅在硬编码时才有效。那你有解决办法吗?更一般地说,这是制作 xib 的好方法吗?

这有效,但是是硬编码的

self.contentView.layer.cornerRadius = 12.0

这个效果太强了,显然没有计算正确的值。

self.contentView.layer.cornerRadius = self.frame.width / 2.0 

enter image description here

enter image description here

测试了一些IBInspectable,BU问题是一样的。

//    @IBInspectable
//    var autoCalculateCornerRadius: Bool = false
    
//    fileprivate var backingCornerRadius: CGFloat = 0
//    @IBInspectable
//    var cornerRadius: CGFloat {
//        set { layer.cornerRadius = newValue }
//        get { return layer.cornerRadius     }
//    }
    
//    @IBInspectable
//    var cornerRadius: CGFloat {
//        set {
//            backingCornerRadius = newValue
//            self.layer.cornerRadius = newValue
//        }
//        get {
//            return self.layer.cornerRadius
//        }
//    }
    
//    override func layoutSubviews() {
//        super.layoutSubviews()
//        if autoCalculateCornerRadius {
//            backingCornerRadius = cornerRadius
//            cornerRadius = self.frame.width / 2.0
//        } else {
//            cornerRadius = backingCornerRadius
//        }
//    }

import UIKit

class MyCustomViewXib: UIView {

    @IBOutlet weak var myImage: UIImageView!
    @IBOutlet weak var myLabel: UILabel!
    
    @IBOutlet var contentView: UIView! //the owner view itself
    
    private var viewHeight: CGFloat = 0

    
    required public init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.setup()
    }
    
    required override init(frame: CGRect) {
        super.init(frame: frame)
        self.setup()
    }
    
    deinit {
    }
    
    
    private func setup() {
        Bundle.main.loadNibNamed("\(Self.self)",owner: self,options: nil)
        addSubview(contentView)
//        self.backgroundColor = .clear
        viewHeight = contentView.frame.size.height
        contentView.frame = self.bounds
        contentView.translatesAutoresizingMaskIntoConstraints = false
        contentView.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
        contentView.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true
        contentView.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true
        contentView.trailingAnchor.constraint(equalTo: self.trailingAnchor).isActive = true

        
        self.myLabel.backgroundColor = .red
        self.myImage.backgroundColor = .systemteal
        self.contentView.backgroundColor = .systemGreen
        self.contentView.layer.cornerRadius = 12.0
//        self.contentView.layer.cornerRadius = self.frame.width / 2.0 too much

        self.setNeedsLayout()
    }
    
 
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)