web-dev-qa-db-fra.com

comment redimensionner une image ou en faire un NSTextAttachment NSAttributedString (ou définir sa taille initiale)

J'ai un NSAttributedString auquel j'ajoute un NSTextAttachment. L'image mesure 50 W par 50 C, mais j'aimerais qu'elle soit réduite pour refléter la hauteur de ligne de la chaîne attribuée. Je pensais que cela se ferait automatiquement mais je suppose que non. J'ai consulté la référence de la classe UImage, mais cette image ne semble pas être définie dans un UIImageView, donc aucun accès à une propriété frame. Voici une capture d'écran de ce que j'ai actuellement:

enter image description here

Dans un monde idéal, j'aimerais également mettre en place un moyen de redimensionner l'image en fonction des entrées de l'utilisateur (par exemple, en augmentant la taille de la police). Des idées sur la façon de réaliser ceci? 

tHX

modifier 1

voici comment je le crée:

    NSTextAttachment *textAttachment = [[NSTextAttachment alloc] init];
    textAttachment.image = [UIImage imageNamed:@"note-small.png"];
    NSLog(@"here is the scale: %f", textAttachment.image.scale);
    NSAttributedString *attrStringWithImage = [NSAttributedString attributedStringWithAttachment:textAttachment];
    [headerAS replaceCharactersInRange:NSMakeRange([headerAS length], 0) withString:@" "];
    [headerAS replaceCharactersInRange:NSMakeRange([headerAS length], 0) withAttributedString:attrStringWithImage];
19
timpone

Examinez le sous-classement NSTextAttachment et l'implémentation des méthodes NSTextAttachmentContainer pour renvoyer différentes tailles en fonction du conteneur de texte fourni. Par défaut, NSTextAttachment renvoie simplement la taille de l'image qui lui est fournie.

14
Wain

Vous devez définir les pièces jointes du formulaire de limites pour redimensionner l'image comme suit:

attachment.bounds = CGRectMake(0, 0, yourImgWidth, yourImgHeight);

36
Dung Nguyen

Si vous avez besoin de redimensionner un groupe d’images NSTextAttachment tout en conservant leurs proportions, j’ai écrit une extension pratique: http://hack.swic.name/convenient-nstextattachment-image-resizing

extension NSTextAttachment {
    func setImageHeight(height: CGFloat) {
        guard let image = image else { return }
        let ratio = image.size.width / image.size.height

        bounds = CGRect(x: bounds.Origin.x, y: bounds.Origin.y, width: ratio * height, height: height)
    }
}

Exemple d'utilisation:

let textAttachment = NSTextAttachment()
textAttachment.image = UIImage(named: "Image")
textAttachment.setImageHeight(16) // Whatever you need to match your font

let imageString = NSAttributedString(attachment: textAttachment)
yourAttributedString.appendAttributedString(imageString)
23
Maciej Swic

Swift4 Si vous souhaitez attribuer une chaîne avec l'image ou une icône

Ici, vous pouvez faire quelque chose comme ça.

func AttributedTextwithImgaeSuffixAndPrefix(AttributeImage1 : UIImage , AttributedText : String ,AttributeImage2 : UIImage,  LabelBound : UILabel) -> NSMutableAttributedString
{
    let fullString = NSMutableAttributedString(string: "  ")
    let image1Attachment = NSTextAttachment()
    image1Attachment.bounds = CGRect(x: 0, y: ((LabelBound.font.capHeight) - AttributeImage1.size.height).rounded() / 2, width: AttributeImage1.size.width, height: AttributeImage1.size.height)
    image1Attachment.image = AttributeImage1
    let image1String = NSAttributedString(attachment: image1Attachment)
    let image2Attachment = NSTextAttachment()
    image2Attachment.bounds = CGRect(x: 0, y: ((LabelBound.font.capHeight) - AttributeImage2.size.height).rounded() / 2, width: AttributeImage2.size.width, height: AttributeImage2.size.height)
    image2Attachment.image = AttributeImage2
    let image2String = NSAttributedString(attachment: image2Attachment)
    fullString.append(image1String)
    fullString.append(NSAttributedString(string: AttributedText))
    fullString.append(image2String)
    return fullString
}

vous pouvez utiliser ce code comme mentionné ci-dessous:

        self.lblMid.attributedText = AttributedTextwithImgaeSuffixAndPrefix(AttributeImage1: #imageLiteral(resourceName: "Left") , AttributedText: "  Payment Details  ", AttributeImage2: #imageLiteral(resourceName: "RIght") , LabelBound: self.lblMid)

ici vous pouvez ajouter des images que vous pouvez remplacer par les vôtres:

Image de gauche  enter image description here

Image de droite  enter image description here

Out mis sera comme ça  enter image description here

0

NSTextAtatchment est juste un support pour un UIImage afin de redimensionner l'image lorsqu'elle doit être redimensionnée et de recréer la pièce jointe ou de définir son image. Vous devrez forcer une mise à jour nslayout si vous modifiez l'image sur une pièce jointe existante.

0
scottdev