UIButton Round Corner在iPhone 5上无法正常工作

时间:2017-01-31 20:20:22

标签: ios iphone swift xcode

这是通过UI扩展方法

extension UIView {
func roundCorners(corners:UIRectCorner, radiusWidth: CGFloat,radiusHeight: CGFloat) {
    let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radiusWidth/2, height: radiusHeight/2))
    let mask = CAShapeLayer()
    mask.path = path.cgPath
    self.layer.mask = mask
}}

通过这种扩展方法,我想在viewdidload

上使用此代码制作带圆角的按钮
 btnRideNow.roundCorners(corners: [.topRight], radiusWidth: btnRideNow.frame.width,radiusHeight: btnRideNow.frame.height )
 btnRideLater.roundCorners(corners: [.topLeft], radiusWidth: btnRideLater.frame.width,radiusHeight: btnRideLater.frame.height )

但是在iPhone 5上我得到了这个结果 ScreenShot

你可以看到左键无法正常渲染,但在iPhone 6中,这项工作正常吗?

3 个答案:

答案 0 :(得分:1)

如果您想要圆角,您可以轻松完成:

view.layer.cornerRadius 

如果你想要一个边框,你可以做

view.layer.borderWidth 

和颜色

view.layer.borderColor

答案 1 :(得分:1)

这完全是时间问题。

如果您过早致电roundCorners ,例如在viewDidLoad中,按钮framebounds可能尚未最终确定。但是您的roundCorners取决于bounds,因此如果您添加了掩码并且按钮是,那么会因布局而调整大小,您将会自然会得到错误的结果。

答案 2 :(得分:0)

这是一个与IB一起使用的简单子类。您应该能够轻松地根据您的需求进行调整:

@IBDesignable
public class Button: UIButton {
    @IBInspectable public var borderColor:UIColor? {
        didSet {
            layer.borderColor = borderColor?.cgColor
        }
    }
    @IBInspectable public var borderWidth:CGFloat = 0 {
        didSet {
            layer.borderWidth = borderWidth
        }
    }
    @IBInspectable public var cornerRadius:CGFloat {
        get {
            return layer.cornerRadius
        }
        set {
            layer.cornerRadius = newValue
            layer.masksToBounds = newValue > 0
        }
    }
}

现在,如果你想简单地编写代码,你就得到了大部分答案。一个完整的圆圈:

view.layer.cornerRadius = view.frame.height / 2

如果它是方形的,你可以使用宽度。但就像@Matt说的那样(他的非常好),小心这样做之后你正确设置了框架/边界!