[Swift]UILabel의 원하는 위치에 이미지를 추가하고 행 사이를 설정할 수 있는 확장 메서드

6446 단어 Swift

하고 싶은 일


UILabel의 선두에 화상을 추가해, Label가 복수행이 되었을 때의 행간을 추가할 수 있는 메소드를 만든다.
(Label의 말미에 이미지를 추가한다면, 비교적 간단하지만… 말미 이외이라면 조금 까다롭다 )
  • Label이 여러 줄로 행 사이를 설정할 수 있습니다
  • 텍스트의 시작 부분에 이미지를 넣습니다

  • ↓ 이미지는 이런 느낌입니다. . . (※아래와 같은 코드를 실행해도 이 이미지처럼 보이지 않습니다)
    고양이 씨 귀여운
    "귀여운 고양이"

    코드



    .swift
    extension UILabel {
        func setupSpacingAndImage(
            _ text: String, spacingHeight: Float, image: UIImage, at index: Int, size: CGSize? = nil
        ) {
            let attributedString = NSMutableAttributedString()
    
            let attachment = NSTextAttachment(image: image, font: font, size: size ?? image.size, alignment: .center)
            attributedString.append(NSAttributedString(attachment: attachment))
            attributedString.append(NSAttributedString(string: text))
    
            let style = NSMutableParagraphStyle()
            style.lineSpacing = CGFloat(spacingHeight)
    
            let attributes: [NSAttributedString.Key: Any] = [
                .paragraphStyle: style
            ]
            attributedString.addAttributes(attributes, range: NSRange(location: index, length: attributedString.length))
    
            self.attributedText = attributedString
        }
    }
    

    사용법



    .swift
    // 引数imageは非Optionalなので、オプショナルバインディング
    guard let image = UIImage(named: "imageName")
    label.setupSpacingAndImage("Labelに表示したい複数行のテキスト", spacingHeight: 6, image: image, at: 0, size: CGSize(width: 16, height: 16))
    

    인수의 간략한 설명


    "Label에 표시하려는 여러 줄 텍스트"
    -> Label의 text로서 설정하고 싶은 문자. 인수 이름은 생략되었습니다.
    spacingHeight: 6
    -> 행 사이의 높이를 설정합니다.
    image: image
    -> 삽입하려는 이미지
    at: 0
    -> 얼마나 많은 문자 눈에 그림을 삽입하는가? 메소드내에서는, at index: Int 에 의해 at로 설정한 값을 index로서 사용하고 있습니다.
    size: CGSize(width: 16, height: 16))
    -> 이미지의 크기입니다. 여기를 설정하지 않으면 이미지 본래의 크기를 설정합니다.

    좋은 웹페이지 즐겨찾기