为什么我对具有渐变背景的 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 模拟器
中显示的结果
只有 UIView
和 cornerRadius
有奇怪的行为,此屏幕截图中的所有其他元素都不是 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
}
我正在尝试向包含 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 模拟器
中显示的结果只有 UIView
和 cornerRadius
有奇怪的行为,此屏幕截图中的所有其他元素都不是 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
}