UIView 背景渐变与界面生成器视图

Posted

技术标签:

【中文标题】UIView 背景渐变与界面生成器视图【英文标题】:UIView Background Gradient With Interface Builder View 【发布时间】:2013-02-15 23:23:44 【问题描述】:

我想使用渐变作为 UIView 的背景。我知道这通常是通过图像和backgroundColor 属性完成的。但是,我想学习如何在代码中做到这一点。使用https://***.com/a/1931498/99683,我可以通过编程方式创建UIView,并给它一个渐变层。这很好用。

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(20, 340, 280, 100)];
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = view.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor redColor] CGColor], (id)[[UIColor yellowColor] CGColor], nil];
[view.layer insertSublayer:gradient atIndex:0];
[self.view addSubview:view];

但是,如果我在 Interface Builder 中放置一个视图(背景设置为清除)并尝试相同的操作,渐变永远不会出现。

CAGradientLayer *gradient2 = [CAGradientLayer layer];
gradient2.frame = self.containerView.bounds;
gradient2.colors = [NSArray arrayWithObjects:(id)[[UIColor blueColor] CGColor], (id)[[UIColor greenColor] CGColor], nil];
[self.containerView.layer insertSublayer:gradient2 atIndex:0];

我还需要在 IB 或代码中做些什么来完成这项工作吗?

【问题讨论】:

嗨。这里的“自我”是什么?一个 UITableViewCell?我最好的建议是实现一个 UIView 并在 drawRect 方法中进行绘图 :) 如果你想要它那么糟糕的话,然后在你的 XIB 中使用这个 UIView 子类:-) 但这只是个人建议,我不是一个大粉丝IB。 self 是视图控制器,containerViewUIView 对象的 IB 出口。是的,在这一点上,我想把它作为一种学术练习来做,而不是其他任何事情。我得试试子类和drawRect 方法。 子类和drawRect 方法对我来说效果很好顺便说一句。谢谢@Vinzius!仍然很想知道是否有更直接的方法来使用 IB 视图进行渐变。 :) 好酷 :-) 好吧,做子类并在 IB 中使用它们还不错,这是改善生活的最低要求 xD 【参考方案1】:

我遇到了同样的问题,但最终发现 UIView 尚未在您尝试设置背景渐变的代码中创建,我猜在您的情况下可能是以下之一 -viewDidLoad 或 -viewWillAppear 因为它

self.containerView.bounds 将是 0, 0, 0, 0

相反,你应该在里面设置渐变层

viewDidAppear

此时已创建视图。

【讨论】:

【参考方案2】:

该库支持使用 IB_DESIGNABLE / IBInspectable 在 Storyboard 中设置渐变背景。

真的很有用。

https://github.com/recruit-mtl/EXTView/

【讨论】:

以上是关于UIView 背景渐变与界面生成器视图的主要内容,如果未能解决你的问题,请参考以下文章

在“集合视图”单元格中的UIView上设置渐变背景

界面生成器和视图层次结构

ios UIview 在视图中

具有拐角半径和阴影视图的 UIView 不会在拐角处剪辑子视图

iOS - 界面生成器 - 不继承父视图 alpha 的子视图

向 UITableViewCell 的 UIView(背景视图)添加子层会覆盖其他单元格视图吗?