背景颜色渐变不覆盖整个视图 Xcode

Posted

技术标签:

【中文标题】背景颜色渐变不覆盖整个视图 Xcode【英文标题】:Background colour gradient doesn't cover the entire view Xcode 【发布时间】:2020-01-07 16:07:44 【问题描述】:

对视图应用渐变后,结果如图所示。渐变色(黄色部分)不会延伸到视图边界。黄色和红色都是同一个视图。无法弄清楚发生了什么。这是我的代码:

let gradientLayer = CAGradientLayer()
        gradientLayer.frame = bounds
        //gradientLayer.frame = frame
        //gradientLayer.bounds = frame
        gradientLayer.colors = [colorOne.cgColor, colorTwo.cgColor]
        gradientLayer.locations = [0.0, 1.0]
        gradientLayer.startPoint = CGPoint(x: 1.0, y: 1.0)
        gradientLayer.endPoint = CGPoint(x: 0.0, y: 0.0)

        layer.insertSublayer(gradientLayer, at: 0

colorOnecolorTwo 在别处定义。

)

有人遇到同样的问题吗?

【问题讨论】:

您的代码在父视图框架更新(到设备大小)之前被调用。这就是为什么你有这个问题。在 viewDidLayoutSubViews 中,更新渐变帧。 ***.com/questions/47937307/…***.com/questions/52348716/…***.com/questions/28269452/…等 【参考方案1】:

这与 storyboard 中的约束有关,直到 subviews 布局后才应用。在 viewDidLoad() 中,视图具有来自storyboard 的固定大小。如果您移动将图层框架设置为viewDidLayoutSubviews() 的代码,则约束已应用于 yourView 并且它具有正确的框架。然后您可以设置图层的框架。

override func viewDidLayoutSubviews() 
    super.viewDidLayoutSubviews()

    gradientLayer.frame = yourView.bounds

然后它将填满整个视图。

【讨论】:

gradientLayer.frame = yourView.bounds 可能会更好。 别提了! 也许我说得太早了……现在改变方向时它不会更新到边界。 尝试:覆盖 func layoutSubviews() gradientLayer.frame = self.bounds 【参考方案2】:

我说得太早了……现在改变方向时它不会更新到边界(它同时显示水平和垂直渐变) 有什么想法吗?

【讨论】:

以上是关于背景颜色渐变不覆盖整个视图 Xcode的主要内容,如果未能解决你的问题,请参考以下文章

在具有多个部分的 tableView 中滚动时使用平滑动画更改视图背景渐变颜色

带有渐变颜色的滚动视图

在不使用渐变的情况下添加两种颜色作为背景

div背景颜色怎样渐变 css实现div层背景颜色渐变代码

创建基于渐变的 UICollectionViewCell 背景颜色

如何在视图控制器的多个视图中添加多个渐变颜色