UIView的渐变图层不符合约束集

时间:2016-05-07 23:07:09

标签: ios swift uiview uiviewcontroller cagradientlayer

viewDidLoad中,我实例化UIView并向该UIView添加渐变图层。

这适用于iPhone,但在iPad上,UIView无法延伸以填满整个屏幕。请注意iPad sim的以下屏幕截图。

iPad simulator screenshot

我尝试以编程方式和使用XCode添加约束。

似乎一旦我添加CAGradientLayer,UIView就不符合我设置的约束,无论是以编程方式还是使用XCode工具。

示例代码:

gradientLayer = CAGradientLayer()
gradientLayer.frame = self.view.bounds
gradientLayer.locations = [0.5, 1.0]
gradient_View.backgroundColor = UIColor.blueColor()
let color1 = self.opus_Page_Background_Color.CGColor as CGColorRef
let color4 = self.opus_Page_Tertiary_Color.CGColor as CGColorRef
gradientLayer.colors = [color1, color4]
self.gradient_View.frame = self.view.bounds
self.gradient_View.layer.insertSublayer(gradientLayer, atIndex: 0)
gradient_View.translatesAutoresizingMaskIntoConstraints = false

let leadingConstraint = NSLayoutConstraint(item: gradient_View, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Leading, multiplier: 1, constant: 0)
            leadingConstraint.active = true
            view.addConstraint(leadingConstraint)

let trailingConstraint = NSLayoutConstraint(item: gradient_View, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Trailing, multiplier: 1, constant: 0)
            trailingConstraint.active = true
            view.addConstraint(trailingConstraint)

let widthConstraint = NSLayoutConstraint(item: gradient_View, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 100)
            view.addConstraint(widthConstraint)

let heightConstraint = NSLayoutConstraint(item: gradient_View, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 100)
            view.addConstraint(heightConstraint)
            NSLayoutConstraint.activateConstraints([leadingConstraint, trailingConstraint, widthConstraint, heightConstraint])

2 个答案:

答案 0 :(得分:1)

您添加了前导和尾随约束,这意味着您已获得视图的宽度。所以根本不需要添加宽度约束。从故事板中删除宽度或以编程方式删除您正在使用的宽度。 我也可以看到一个缺失的顶级约束。解决这个问题

答案 1 :(得分:0)

尝试更改最后两个约束。而不是匹配宽度和高度,将其固定到Top&底部。问题可能是在viewDidLoad中,您的视图的宽度= X,高度= Y,但这不是最终布局。 如果这不起作用,请尝试在viewDidLayoutSubviews中添加它。

希望它有所帮助!