cómo cambiar el tamaño de una imagen o hecho como NSAttributedString NSTextAttachment (o establecer su tamaño inicial)

Tengo un NSAttributedString al cual estoy agregando un NSTextAttachment. La imagen es 50w por 50h, pero me gustaría que se reduzca para reflejar la altura de la línea atribuida. Pensé que esto se haría automáticamente pero supongo que no. He observado la referencia de la clase UImage, pero esta imagen no parece configurarse en UIImageView, por lo que no hay acceso a la propiedad de un cuadro. Aquí hay una captura de pantalla de lo que tengo actualmente:

enter image description here

En un mundo ideal, también me gustaría implementar una forma de escalar la imagen en función de la entrada del usuario (como boost el tamaño de la fuente). ¿Alguna idea sobre cómo lograr esto?

Gracias

editar 1

así es como lo estoy creando:

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

Observe la subclasificación de NSTextAttachment y la implementación de los métodos NSTextAttachmentContainer para devolver diferentes tamaños en función del contenedor de texto proporcionado. De forma predeterminada, NSTextAttachment simplemente devuelve el tamaño de la imagen con la que está provisto.

Debe establecer los límites de los archivos adjuntos para cambiar el tamaño de la imagen de esta manera:

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

Si necesita cambiar el tamaño de un montón de imágenes NSTextAttachment manteniendo su relación de aspecto, he escrito una práctica extensión: 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) } } 

Ejemplo de uso:

 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) 

NSTextAtatchment es solo un soporte para un UIImage, de modo que escale la imagen cuando necesite escalar y recree el archivo adjunto de texto o configure su imagen. Tendrá que forzar una actualización de nslayout si cambia la imagen en un archivo adjunto de texto existente.

Swift4 si desea una cadena atribuida junto con la imagen o un icono

aquí puedes hacer algo como esto.

 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 }