Swift 4中的Round Corners UIView

时间:2017-10-12 15:35:19

标签: ios swift uiview swift4 ibdesignable

在swift 3中,我可以做这样的事情让我的UIView转角:

import UIKit

@IBDesignable
class DesignableView: UIView {
}

extension UIView {

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

在故事板上我可以简单地改变这个: properties

目前我正在设计一个“Build failed”,但Idk为什么。我正在研究swift 4和Xcode 9。

为什么它不能在swift 4中工作?

4 个答案:

答案 0 :(得分:21)

我已经尝试过您的代码,并且它可以在iOS 11.1& Swift 4.0。 (正如您所提到的,它会向您显示错误,但它没有向我显示任何错误)

@IBDesignable
class RoundUIView: UIView {

    @IBInspectable var borderColor: UIColor = UIColor.white {
        didSet {
            self.layer.borderColor = borderColor.cgColor
        }
    }

    @IBInspectable var borderWidth: CGFloat = 2.0 {
        didSet {
            self.layer.borderWidth = borderWidth
        }
    }

    @IBInspectable var cornerRadius: CGFloat = 0.0 {
        didSet {
            self.layer.cornerRadius = cornerRadius
        }
    }

}

这是结果

enter image description here


更新
即使你的更新代码也正常工作。

@IBDesignable
class DesignableView: UIView {
}

extension UIView {

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

这是结果:

enter image description here

答案 1 :(得分:1)

此解决方案对我来说很有效,可以在Swift 5中获取圆形的UIView

view.layer.cornerRadius = 10;
view.clipsToBounds  =  true

答案 2 :(得分:0)

您的代码似乎在Swift 4.0中使用新项目正常工作。但是,if you are using a Storyboard and its set as LaunchScreen too, you won't be able to use custom classes directly there

在这种情况下,只需取消选中用作启动屏幕,您就可以再次构建。

enter image description here

答案 3 :(得分:0)

public func RoundFrameBackground(_ aView: UIView!, borderWidth: CGFloat!, cornerRadius: CGFloat!, borderColor: UIColor, backgroundColor: UIColor) {
    aView.layer.borderWidth = borderWidth ; aView.layer.borderColor = borderColor.cgColor
    aView.backgroundColor = backgroundColor ; aView.clipsToBounds = true
    aView.layer.cornerRadius = cornerRadius
}

public func RoundFrameOnly(_ aView: UIView!, cornerRadius: CGFloat!) {
    aView.clipsToBounds = true
    aView.layer.cornerRadius = cornerRadius
}

使用:

RoundFrameBackground(*a view*, borderWidth: 1, cornerRadius: 10, borderColor: UIColor.red, backgroundColor: UIColor.blue)

RoundFrameOnly(*a view*, cornerRadius: 10)