代码之家  ›  专栏  ›  技术社区  ›  kamalakshi hegde

无法设置以swift编程方式创建的uibutton的cornerradius

  •  0
  • kamalakshi hegde  · 技术社区  · 7 年前

    我正在尝试设置 cornerRadius A的 UIButton 所以它看起来像圆形,但我做不到。

    这是我试过的代码。

    func addColorButton() {
        let colorButton : UIButton = {
            let cb = UIButton()
            cb.translatesAutoresizingMaskIntoConstraints = false
            cb.backgroundColor = .black
    
            return cb
        }()
    
        view.addSubview(colorButton)
        colorButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        colorButton.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -10).isActive = true
        colorButton.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 0.5).isActive = true
        colorButton.heightAnchor.constraint(equalTo: view.widthAnchor, multiplier: 0.5).isActive = true
        colorButton.layer.cornerRadius = 0.5 * colorButton.bounds.size.width
        print(colorButton.bounds.width)
        colorButton.clipsToBounds = true
    
    }
     override func viewDidLoad() {
        super.viewDidLoad()
    
       addColorButton()
    }
    
    3 回复  |  直到 7 年前
        1
  •  2
  •   Lal Krishna    7 年前

    在自动布局完成之前,不会设置按钮边界/帧。 你可以更新,

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews() 
    
        // Update corner radius here
        colorButton.layer.cornerRadius = 0.5 * colorButton.bounds.size.width
    }
    
        2
  •  0
  •   Vxed    7 年前

    我想你需要用maskstobounds。

    colorButton.layer.masksToBounds = true
    
        3
  •  0
  •   Vishal Gandhi    7 年前

    您可以创建简单的子类,可以随时使用

    我只显示了带有阴影和圆角的uibutton的引用,但是您可以使它从故事板中可以使用这些属性。

    类uiButtonShadow:uiButton{

    var yPos : CGFloat = 2 {
        didSet {
            addBehavior()
        }
    }
    
    var radius : CGFloat = 2 {
        didSet {
            addBehavior()
        }
    }
    
    var cornerRadius : CGFloat = 18 {
        didSet {
            addBehavior()
        }
    }
    
    
    override var bounds: CGRect {
        didSet {
            addBehavior()
        }
    }
    
    override var frame: CGRect{
        didSet{
            addBehavior()
        }
    }
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        addBehavior()
    }
    
    override func awakeFromNib() {
        super.awakeFromNib()
        addBehavior()
    }
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
    
    func addBehavior() {
        self.layer.cornerRadius = cornerRadius
        let shadowPath = UIBezierPath(roundedRect:self.bounds,cornerRadius:self.layer.cornerRadius)
        self.layer.masksToBounds = false
        self.layer.shadowColor =  UIColor.black.cgColor
        self.layer.shadowOffset = CGSize(width:0.0,height:yPos)
        self.layer.shadowOpacity = 0.3
        self.layer.shadowPath = shadowPath.cgPath
        self.layer.shadowRadius = radius
    }
    

    }

    推荐文章