无法设置已在swift中以编程方式创建的UIButton的cornerRadius

时间:2018-05-22 08:40:59

标签: ios uibutton swift4

我正在尝试设置cornerRadius的{​​{1}},使其看起来像圆形,但我无法做到。

这是我尝试过的代码。

UIButton

3 个答案:

答案 0 :(得分:2)

按钮边界/框架不会设置,直到自动布局完成。 你可以更新,

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews() 

    // Update corner radius here
    colorButton.layer.cornerRadius = 0.5 * colorButton.bounds.size.width
}

答案 1 :(得分:0)

我认为你需要使用masksToBounds。

colorButton.layer.masksToBounds = true

答案 2 :(得分:0)

您可以创建可以在需要时使用的简单子类

我只是用阴影和圆角显示UIButton的引用,但你可以使它从故事板中使用这些属性IBInspectable。

类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
}

}