53 votes

Ajout d'une image d'arrière-plan à UILabel

Comment ajouter une image de fond à un UILabel dans une application iPhone. J'ai essayé de le faire via IB mais sans résultat.

150voto

Evadne Wu Points 2781

Essayez de le faire avec un code :

Objective-C :

theLabel.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"blah"]];

Swift :

theLabel.backgroundColor = UIColor(patternImage: UIImage(named: "blah")!)

Ou placer un UIImageView derrière l'étiquette (non recommandé).


Mise à jour : il n'est pas recommandé de placer une UIImageView derrière une étiquette, car il faudrait alors gérer deux vues. Mais si vous devez faire quelque chose que seule une UIImageView peut faire, cela reste une bonne approche. Je pense que votre application fonctionnera mieux de cette manière.

0 votes

Merci beaucoup. C'est exactement ce que je voulais.

2 votes

Fonctionnalité excellente et utile, 1up ! :) Mais je me demande à quoi Apple a pensé en implémentant l'image en tant que backgroundColor. C'est tout à fait contre-intuitif ! Même le CSS a des propriétés séparées pour l'image de couleur du bg. Peut-être que c'est un héritage des interfaces utilisateur d'Apple du passé ?

4 votes

Je l'ai testé et il ne prend pas en charge la transparence PNG. Il y a peut-être une astuce ? J'ai essayé de régler le backgroundColor sur clearColor avant de le régler sur l'image, juste pour le sport. Mais sans effet, bien sûr.

18voto

Lê Trinh Points 51

Si vous souhaitez que l'image soit étirée pour remplir la largeur de l'étiquette. essayez ce code.

UILabel *myLabel=[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 20)];

UIImage *img = [UIImage imageNamed:@"a.png"];
CGSize imgSize = myLabel.frame.size;

UIGraphicsBeginImageContext( imgSize );
[img drawInRect:CGRectMake(0,0,imgSize.width,imgSize.height)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

myLabel.backgroundColor = [UIColor colorWithPatternImage:newImage];

0 votes

Il fonctionne mais pour une raison ou une autre la qualité n'est pas celle attendue. pourquoi ?

0 votes

@Esq Si vous étirez une image, elle perdra en définition et ne sera pas d'aussi bonne qualité que l'originale.

0 votes

Qu'en est-il de l'image à neuf patchs ? Cela pourrait-il résoudre le problème de qualité ?

0voto

Bill Chan Points 38

Swift 2.2 : définir l'image d'arrière-plan avec la couleur d'arrière-plan

    UIGraphicsBeginImageContextWithOptions(stationNameLabel.frame.size, false, 0.0)

    let context = UIGraphicsGetCurrentContext();

    let components = CGColorGetComponents(color.CGColor)

    CGContextSetRGBFillColor(context, components[0], components[1], components[2], 0.4);
    CGContextFillRect(context, CGRectMake(0.0, 0.0, stationNameLabel.frame.size.width, stationNameLabel.frame.size.height));

    targetImage.drawInRect(CGRectMake(0.0, 0.0, stationNameLabel.frame.size.width, stationNameLabel.frame.size.height))
    let resultImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    label.backgroundColor = UIColor(patternImage: resultImage)

0voto

Davender Verma Points 130
 let messageBackgroundView = UIImageView()
        messageBackgroundView.image = UIImage(named: "chat-background")
        if messageBackgroundView.superview != lblChatdata.superview {
            lblChatdata.superview!.insertSubview(messageBackgroundView, belowSubview: lblChatdata)
            messageBackgroundView.translatesAutoresizingMaskIntoConstraints = false
            NSLayoutConstraint.activate([
                messageBackgroundView.leadingAnchor.constraint(equalTo: lblChatdata.leadingAnchor),
                messageBackgroundView.trailingAnchor.constraint(equalTo: lblChatdata.trailingAnchor),
                messageBackgroundView.topAnchor.constraint(equalTo: lblChatdata.topAnchor),
                messageBackgroundView.bottomAnchor.constraint(equalTo: lblChatdata.bottomAnchor),
                ])
            messageBackgroundView.contentMode = .scaleAspectFill
        }

-1voto

@pixelfreak, vous avez raison. L'instance UIColor avec un motif d'image de couleur a de sérieux problèmes de performance lorsqu'elle est assignée à backroundcolor.

cell.cellLabel.backgroundColor = UIColor(patternImage: UIImage(named: "background")!)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X