如何在UILabel文本的开始位置将图像放置在UILabel中?

时间:2019-07-02 22:59:14

标签: ios swift image uilabel

嗨,我想将图像圆点添加到我的应用程序中的某些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
    }
}

1 个答案:

答案 0 :(得分:1)

我明白了。问题是我在情节提要(.xib)中设置了文本。因此,即使bool-val错误,此扩展程序也不会将图像更改为最前面。

只需在函数调用中设置文本,“ false”值将触发在uilabel开头设置图像。

Example1(我做错了):

// 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!

Example2(它起作用了!):

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!