2017-08-29 7 views
0

UILabel J'ai généré le UIColor dégradé par le code suivant:Définissez un bug de couleur de fond gradient pour

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]; 

Pour vérifier le UIColor, j'ai ajouté le code suivant:

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]; 

Je trouve que sur l'UIView, la couleur est normale, l'UILabel, la couleur devient plus petite As shown:

Je me demande pourquoi? Y a-t-il une solution? Merci.

+0

Je veux convertir UIColor, qui est plus souple, par exemple, pour SetTextColor: –

+0

Mais c'est pas la question que vous avez posée. – matt

+0

Testé, UILabel dans l'utilisation de tous les [UIColor colorWithPatternImage: gradientImage], sera plus petit –

Répondre

0

Il y a beaucoup d'autres façons de le faire. colorWithPatternImage est toujours joli skanky; pourquoi n'utilisez-vous pas CAGradientLayer? C'est pour ça, après tout. Ou, puisque vous savez que la vue fonctionne comme vous le souhaitez, pourquoi ne pas rendre la couleur de fond de l'étiquette claire, et mettre la vue dégradée derrière elle?

+0

Merci, Votre approche résout le problème. Je veux aussi savoir pourquoi direct [label setBackgroundColor: gradientColor]; L'affichage ne sera pas correct –

0

Je ne comprends pas pourquoi le problème a disparu lors de l'utilisation AutoLayout:

enter image description here enter image description here

+0

Merci, j'ai trouvé qu'en utilisant frame, même si une image UI normale, UILabel serait mal aligné. Cela n'a rien à voir avec les gradients. –

+0

Je suis curieux de savoir comment vous le faites. J'utilise autolayout et toujours égarer –

+0

La mise en page autolayout sera toujours désalignée comme le code crée UILabel –