如何在 UILabel 文本的开头将图像放在 UILabel 中?

How to place image inside UILabel on start of UILabel text?

嗨,我想在我的应用程序中的某些 UILabel 中添加图像圆点。

我有添加图像的代码。但我不明白如何将图像放在 UILabel 的开头而不是标签的末尾。

对此有什么建议吗?下面是我使用的代码: 我应该添加什么来将图像放在 UILabel 的开头?我以为 imageBehindText :false 会修复它,但它没有。

extension UILabel {
/**
 This function adding image with text on label.

 - parameter text: The text to add
 - parameter image: The image to add
 - parameter imageBehindText: A boolean value that indicate if the imaga is behind text or not
 - parameter keepPreviousText: A boolean value that indicate if the function keep the actual text or not
 */
func addTextWithImage(text: String, image: UIImage, imageBehindText: Bool, keepPreviousText: Bool) {
    let lAttachment = NSTextAttachment()
    lAttachment.image = image

    // 1pt = 1.32px
    let lFontSize = round(self.font.pointSize * 1.20)   // rounded dot should be smaller than font
    let lRatio = image.size.width / image.size.height

    lAttachment.bounds = CGRect(x: 0, y: ((self.font.capHeight - lFontSize) / 2).rounded(), width: lRatio * lFontSize, height: lFontSize)

    let lAttachmentString = NSAttributedString(attachment: lAttachment)

    if imageBehindText {
        let lStrLabelText: NSMutableAttributedString

        if keepPreviousText, let lCurrentAttributedString = self.attributedText {
            lStrLabelText = NSMutableAttributedString(attributedString: lCurrentAttributedString)
            lStrLabelText.append(NSMutableAttributedString(string: text))
        } else {
            lStrLabelText = NSMutableAttributedString(string: text)
        }

        lStrLabelText.append(lAttachmentString)
        self.attributedText = lStrLabelText
    } else {
        let lStrLabelText: NSMutableAttributedString

        if keepPreviousText, let lCurrentAttributedString = self.attributedText {
            lStrLabelText = NSMutableAttributedString(attributedString: lCurrentAttributedString)
            lStrLabelText.append(NSMutableAttributedString(attributedString: lAttachmentString))
            lStrLabelText.append(NSMutableAttributedString(string: text))
        } else {
            lStrLabelText = NSMutableAttributedString(attributedString: lAttachmentString)
            lStrLabelText.append(NSMutableAttributedString(string: text))
        }

        self.attributedText = lStrLabelText
    }
}

我让它工作了。问题是我在故事板 (.xib) 中设置了文本。因此,即使 bool-val 为假,此扩展程序也不会将图像更改为前面。

只需设置 function-call 中的文本,'false' 值将触发将图像设置在 uilabel 的开头。

示例1(我做错了什么):

// This is what I tried first!
    label.addTextWithImage(text: "",
                                       image: UIImage(named: embededIcon)!,
                                       imageBehindText: false, // note! This is false.
                                       keepPreviousText: true) // this was the problem!

示例 2(是什么让它起作用了!):

label.addTextWithImage(text: "putYourLabelTextHere!",  // You have to put text here, even if it's already in storyboard.
                                   image: UIImage(named: embededIcon)!,
                                   imageBehindText: false,
                                   keepPreviousText: false) // false, so the image will be set before text!