ios ios7 uiimage nsattributedstring nstextattachment

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



ios7 uiimage (5)

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

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

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

En un mundo ideal, también me gustaría implementar una forma de ampliar la imagen en función de las aportaciones del usuario (como aumentar 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];


Mire la subclasificación de NSTextAttachment y la implementación de los métodos de NSTextAttachmentContainer para devolver diferentes tamaños según el contenedor de texto suministrado. De forma predeterminada, NSTextAttachment solo devuelve el tamaño de la imagen que se le proporciona.


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


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


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 }

Puede utilizar este código como se menciona a continuación:

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

Aquí puedes agregar imágenes, puedes reemplazarlas por las tuyas:

Imagen izquierda

Imagen derecha

Out put será así