gpt4 book ai didi

ios - 为什么渐变不覆盖 View 的整个宽度

转载 作者:搜寻专家 更新时间:2023-10-31 08:09:44 24 4
gpt4 key购买 nike

我正在尝试将渐变应用于主屏幕顶部、左侧和右侧的 View ,但由于某种原因,渐变没有覆盖所应用 View 的整个宽度(请参阅图片中的黄色)。

class ViewController: UIViewController {

@IBOutlet weak var myView: UIView!

override func viewDidLoad() {
super.viewDidLoad()

let gradient = CAGradientLayer()
gradient.colors = [UIColor.blue.cgColor, UIColor.white.cgColor]
gradient.startPoint = CGPoint(x:00, y:00)
gradient.endPoint = CGPoint(x:0, y:0.6)
gradient.frame = myView.bounds
myView.clipsToBounds = true
myView.layer.insertSublayer(gradient, at: 0)
}
}

我做错了什么?

enter image description here

最佳答案

问题很可能是您在 viewDidLoad() 中添加了渐变层。在 viewDidLoad() 之前, View 不会设置为其最终大小。

您的 View Controller 可能在您的 XIB/Storyboard 中设置为与您运行它时不同的屏幕尺寸。 (假设您将其设置为 iPhone SE 大小,但您在 6 上运行它。6 的屏幕稍宽,因此在首次加载 View 时,该层将设置为 iPhone SE 的宽度。然后 View 将调整大小,但层的大小将永远不会调整。)

您应该实现 UIViewController 方法 viewDidLayoutSubviews(),并在该方法中调整图层的框架:

override func viewDidLayoutSubviews() {
gradientLayer.frame = self.view.bounds
}

这样,如果 View 调整大小(例如,由于自动旋转),渐变层将相应地自动调整。

编辑:

正如 Sulthan 所指出的,图层框架的更改默认情况下是动画的。您可能应该将帧更改包装在 CATransaction.begin/CATransaction.end 中并禁用操作,如下所示:

override func viewDidLayoutSubviews() {
CATransaction.begin()
CATransaction.setDisableActions(true)
gradientLayer.frame = self.view.bounds
CATransaction.commit()
}

关于ios - 为什么渐变不覆盖 View 的整个宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44737260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com