为 UILabel 设置渐变背景颜色错误

Set a gradient background color bug for UILabel

我已经通过以下代码生成了渐变 UIColor:

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:

我想知道为什么?有解决办法吗?谢谢

还有很多其他方法可以做到这一点。 colorWithPatternImage 总是很下流;为什么不使用 CAGradientLayer?毕竟,这就是它的用途。或者,既然您知道视图以您想要的方式工作,为什么不使标签的背景颜色清晰,并将渐变视图置于其后?

我不明白为什么在使用 AutoLayout 时问题消失了: