背景颜色渐变不覆盖整个视图 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
colorOne
和 colorTwo
在别处定义。
)
有人遇到同样的问题吗?
【问题讨论】:
您的代码在父视图框架更新(到设备大小)之前被调用。这就是为什么你有这个问题。在 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 中滚动时使用平滑动画更改视图背景渐变颜色