以编程方式更改视图的高度和宽度会导致使用swift在iOS中出现意外行为

时间:2016-06-03 13:31:16

标签: ios swift uiview frame gradient

我正在使用

制作一个视图
dashboardView.layer.cornerRadius = dashboardView.frame.height/2

它正在发挥作用。然后我用这个方法改变了我的View的高度和宽度

dashboardView.frame = CGRect(x: screenSize.width/2,y: 300,width: 200,height: 200)

现在,当我尝试使用相同的方法进行循环时,它不起作用。 我还使用此方法在视图上添加了渐变图层

    let gradient: CAGradientLayer = CAGradientLayer()
    let endingColorOFGradient = UIColor(colorLiteralRed: 133/255, green: 210/255, blue: 230/255, alpha: 1.0).CGColor
    let startingColorOfGradient = UIColor(colorLiteralRed: 50/255, green: 189/255, blue: 170/255, alpha: 1.0).CGColor
    gradient.startPoint = CGPoint(x: 1.0, y: 0.5)
    gradient.endPoint = CGPoint(x: 0.0, y: 0.5)
    gradient.frame = CGRect(x: 0, y: 0, width: dashboardView.layer.frame.width, height: dashboardView.layer.frame.height)
    gradient.colors = [startingColorOfGradient , endingColorOFGradient]
    self.dashboardView.layer.insertSublayer(gradient, atIndex:0)
    // making gradient round
    gradient.cornerRadius = dashboardView.frame.height/2

在更改View渐变的大小后,图层会变圆,但我的视图不会。

这是我创建的视图。实际上我想根据设备改变它的大小。在iphone 5上它应该很小,在iphone 6+上应该更大 enter image description here

这就是我所得到的 enter image description here 我被困在这一点上。

2 个答案:

答案 0 :(得分:5)

设置渐变后再次调用dashboardView.layer.cornerRadius = dashboardView.frame.height/2因为您正在更改框架,因此它的高度应该不同,因此您的dashboardView.frame.height/2具有不同的值。

如果需要,请尝试将clipstobounds设置为true {/ 1}}。

答案 1 :(得分:2)

问题是Autolayout约束。

我试图改变视图的大小,但Autolayout正在把它放回去。所以我创建了我的高度和宽度约束的出口并相应地改变了它。