>

안녕하세요. 앱의 일부 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

    작동하도록했습니다. 문제는 스토리 보드 (.xib)에서 텍스트를 설정하는 것이 었습니다. 따라서 bool-val이 false 인 경우에도이 확장은 이미지를 앞쪽으로 변경하지 않았습니다.

    함수 호출에서 텍스트를 간단히 설정하면 '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!
    
    

관련 자료

  • 이전 javascript - 웹팩 4 모듈을 찾을 수 없음
  • 다음 python - 팬더에서 dataframe1에서 dataframe2까지의 값 검색