web-dev-qa-db-ja.com

画像のサイズを変更する方法、またはNSAttributedString NSTextAttachmentとして行う方法(またはその初期サイズを設定する方法)

NSTextAttachmentを追加するNSAttributedStringがあります。画像は50w x 50hですが、属性付き文字列の行の高さを反映するように縮小します。これは自動的に行われると思っていましたが、そうではないと思います。 UImageクラスの参照を確認しましたが、この画像はUIImageViewに設定されていないようなので、フレームプロパティにアクセスできません。これが私が現在持っているもののスクリーンショットです:

enter image description here

理想的な世界では、ユーザー入力(フォントサイズの増加など)に基づいて画像を拡大する方法も実装したいと思います。これを達成する方法に関するアイデアはありますか?

どうも

編集1

作成方法は次のとおりです。

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

NSTextAttachmentのサブクラス化とNSTextAttachmentContainerメソッドの実装を見て、提供されたテキストコンテナーに基づいて異なるサイズを返します。デフォルトでは、NSTextAttachmentは提供される画像のサイズを返すだけです。

15
Wain

次のように画像のサイズを変更するには、境界フォームの添付ファイルを設定する必要があります。

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

50
Dung Nguyen

縦横比を維持したまま、一連のNSTextAttachment画像のサイズを変更する必要がある場合は、便利な拡張機能を作成しました: 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)
    }
}

使用例:

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)
26
Maciej Swic

Swift4画像またはアイコンとともに属性付き文字列が必要な場合

ここでは、このようなことができます。

_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
}_

以下で説明するように、このコードを使用できます。

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

ここであなたはそれをあなた自身のものと置き換えることができる画像を追加することができます:

左の画像 enter image description here

右の画像 enter image description here

出力はこんな感じになります enter image description here

3

NSTextAtatchmentはUIImageの単なるホルダーなので、拡大縮小が必要なときに画像を拡大縮小して、テキストの添付ファイルを再作成するか、画像を設定します。既存のテキスト添付ファイルの画像を変更する場合は、nslayoutを強制的に更新する必要があります。

0
scottdev