2017-08-29 243 views
0

我已经通过下面的代码所产生的梯度的UIColor渐变背景颜色错误:设置的UILabel

CAGradientLayer *gradientLayer = [CAGradientLayer layer]; 
gradientLayer.colors = @[(__bridge id)[UIColor redColor].CGColor, 
        (__bridge id)[UIColor yellowColor].CGColor, 
        (__bridge id)[UIColor blueColor].CGColor]; 
gradientLayer.locations = @[@0.3, @0.5, @1.0]; 
gradientLayer.startPoint = CGPointMake(0, 0); 
gradientLayer.endPoint = CGPointMake(1.0, 0); 
gradientLayer.frame = CGRectMake(0, 0, 300, 100); 
UIGraphicsBeginImageContextWithOptions(gradientLayer.bounds.size,NO, [UIScreen mainScreen].scale); 
[gradientLayer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *gradientImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
UIColor *gradientColor = [UIColor colorWithPatternImage:gradientImage]; 

要验证的UIColor,添加以下代码:

UIView *view = [[UIView alloc]initWithFrame:CGRectMake(20, 130, 300, 100)]; 
[view setBackgroundColor:gradientColor]; 
[self.view addSubview:view]; 
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(20, 240, 300, 100)]; 
[label setBackgroundColor:gradientColor]; 
[self.view addSubview:label]; 

我发现在UIView上,颜色是正常的,UILabel,颜色变小了As shown:

我想知道为什么?有解决方案吗?谢谢。

+0

我要转换的UIColor,这是更灵活,例如,对于setTextColor: –

+0

但是,这是不是你问的问题。 – matt

+0

经过测试,UILabel在使用所有的[UIColor colorWithPatternImage:gradientImage]时,会更小 –

回答

0

还有很多其他方法可以做到这一点。 colorWithPatternImage总是很帅气;你为什么不使用CAGradientLayer?毕竟,这就是它的目的。或者,因为您知道视图按照您的方式工作,为什么不让标签的背景颜色清晰并将渐变视图放在后面?

+0

谢谢,你的方法确实解决了这个问题。我也想知道为什么直接[label setBackgroundColor:gradientColor];显示将不正确 –

0

使用自动版式时,我不明白为什么这个问题消失了:

enter image description here enter image description here

+0

谢谢,我发现使用帧,即使一个正常的UI图像,UILabel会错位。它与渐变无关。 –

+0

我很好奇你是如何做到的。我使用自动布局并仍然错位 –

+0

自动布局布局仍然未对齐,因为代码创建UILabel –