为什么我对具有渐变背景的 UIView 有这种奇怪的行为?

Why I got this strange behavior for UIView with gradient background?

我正在尝试向包含 UILabel.

UIView (ContentView) 添加渐变层

我的 UIView 实现:

class ContentView: UIView {
    override init() {
        super.init()
        styleIt()
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        styleIt()
    }

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        styleIt()
    }

    private func styleIt() {
        var gradient = CAGradientLayer()
        gradient.colors = [Utils.Colors.gray_ee.CGColor, Utils.Colors.gray_dd.CGColor]
        gradient.frame = bounds

        layer.insertSublayer(gradient, atIndex: 0)

        layer.borderColor = Utils.Colors.gray_aa.CGColor
        layer.borderWidth = 1

        layer.cornerRadius = 7.0
    }
}

但这是我在 iPhone 6 iOS 模拟器

中显示的结果

只有 UIViewcornerRadius 有奇怪的行为,此屏幕截图中的所有其他元素都不是 UIView 元素。

我已经尝试注释掉与边界相关的代码和半径代码,但仍然是同样的问题。

编辑:这是容器 (UIScrollView) 的另一个绿色背景屏幕截图,所有其他等等标签都在 ContentView 元素中,以在更大的上下文中显示问题。

尝试这样的事情

private var gradient: CAGradientLayer! // Make it a private variable

override init(frame: CGRect) { 
    // Only init(frame:) and init(coder:) are designated initializers. You don't need to override init(). Internally init() will call init(frame:)
    super.init(frame: frame)
    commonInit()
}

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

func commonInit() -> Void {
    // Create & add the layer
    gradient = CAGradientLayer()
    layer.addSublayer(gradient)

    // You need to set locations, startPoint, endPoint apart from colors
    // See Apple documentation for more info
    gradient.locations = [0.0, 1.0]
    gradient.startPoint = CGPointMake(0, 0)
    gradient.endPoint = CGPointMake(0, 1)
    gradient.colors = [UIColor.whiteColor().CGColor, UIColor.greenColor().CGColor];
}

override func layoutSubviews() {
    super.layoutSubviews()

    // bounds may not be correct in init(), better set the layer's frame here
    gradient.frame = bounds 
}