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

Changing Height and Width of View programatically leads to unexpected behaviour in iOS using swift

我使用

使视图四舍五入
dashboardView.layer.cornerRadius = dashboardView.frame.height/2

它正在运行。然后我用这个方法改变了我的视图的高度和宽度

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渐变大小后,图层确实变圆了,但我的View却没有。

这是我创建的视图。其实我想根据设备改变它的大小。它应该在 iphone 5 上较小而在 iphone 6+ 上较大

这就是我得到的 我卡在这一点上了。

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

如果需要,尝试将 clipstobounds 设置为 true for dashboardView

问题是自动布局约束。

我试图更改视图的大小,但 Autolayout 将其放回原处。所以我创建了我的高度和宽度约束的出口并相应地改变了它。