ritesh sangani
ritesh sangani

Reputation: 340

UILabel does get roundedCorners

I have extended the UIView class and added a property for cornerRadius. The property does set to desired value. I have made two custom classes one derives from UITextField and another from UILabel. UITextField gets rounded corners but UILabel does not.

Any help in this regard will be highly appreciated.

@IBDesignable
public class BLabel: UILabel {


public override init(frame: CGRect) {
    super.init(frame: frame)
    layer.cornerRadius = cornerRadius
    layer.masksToBounds = true
    clipsToBounds = true

}


required public init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)

    }
}

extension UIView {
@IBInspectable
var cornerRadius : CGFloat {
    get {return layer.cornerRadius}
    set {layer.cornerRadius = newValue}
    }

}

Upvotes: 0

Views: 97

Answers (3)

ritesh sangani
ritesh sangani

Reputation: 340

I would like to thank @rmaddy for help. I am writing this for the benefit for all. The code given by rmaddy works. But, after testing it I figured out that it is not required. Just setting layer.masksToBounds = true in UIView extension cornerRadius setter method does the trick. So the entire problem was solved by just this one line of code.

So the final code looks like this and it works:

@IBDesignable
public class BTextField: UITextField {


    public override init(frame: CGRect) {
        super.init(frame: frame)

    }

    required public init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)


    }
}


@IBDesignable
public class BLabel: UILabel {


    public override init(frame: CGRect) {
        super.init(frame: frame)

    }

    required public init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

    }


}



extension UIView {
     @IBInspectable
    var cornerRadius : CGFloat {
        get {return layer.cornerRadius}
        set {layer.cornerRadius = newValue
        layer.masksToBounds = true}
    }

}

I hope it helps others also.

Upvotes: 0

DonMag
DonMag

Reputation: 77568

Are you sure your UITextField is responding to cornerRadius? Or are you maybe just seeing the normal rounded corners?

Try changing your BLabel to this - it will make sure the initializations are being called properly:

@IBDesignable
public class BLabel: UILabel {


    public override init(frame: CGRect) {
        super.init(frame: frame)
        commonInit()
    }

    required public init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        commonInit()
    }

    public override func awakeFromNib() {
        super.awakeFromNib()
        commonInit()
    }

    public override func prepareForInterfaceBuilder() {
        super.prepareForInterfaceBuilder()
        commonInit()
    }

    func commonInit() {

        // As noted by "rmaddy" ---
        // setting .cornerRadius here does nothing, as it is always equal to Zero
        // the UIView extension will handle it
        //layer.cornerRadius = cornerRadius

        layer.masksToBounds = true
        clipsToBounds = true

        // the following just makes it easy to confirm
        // that this code is being executed
        backgroundColor = UIColor.red
        textColor = UIColor.yellow
        textAlignment = .center
    }

}

Upvotes: 0

rmaddy
rmaddy

Reputation: 318854

In your BLabel class you access the cornerRadius property of your UIView extension in the init method. This is before you have any chance to set a specific corner radius value so it will be 0.

There's no point to the line layer.cornerRadius = cornerRadius in the init method of BLabel. Simply create the BLabel instance and then set its cornerRadius property.

let label = BLabel(frame: someFrame)
label.cornerRadius = 5

Upvotes: 2

Related Questions