2017-08-29 246 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 –