iOS

[iOS] NSTextAttachment

모리스🙂 2025. 8. 25. 10:57

안녕하세요. 모리스입니다.😀

이번 노트에서는 iOS 앱을 개발하다 보면 텍스트 중간에 이미지를 삽입해야 하는 상황이 종종 있습니다.
예를 들어, "좋아요 👍"처럼 글자 옆에 아이콘을 붙이고 싶을 때가 있죠.

이걸 단순히 UILabel 옆에 UIImageView를 두고 AutoLayout 방식으로도 구현할 수 있지만, 코드의 양이 길어지고 저는 관리하기가 좀 번거롭더라구요..ㅎ

그래 이번 노트에서는 NSAttributedStringNSTextAttachment를 활용해 UILabel 내부 텍스트에 이미지를 삽입하는 방법을 정리해보려고 합니다.

 

핵심은 NSMutableAttributedString이미지 첨부용 객체(NSTextAttachment) 를 추가하는 것입니다.

예제 코드

let label: UILabel = UILabel() 
let mutableAttributedString = NSMutableAttributedString(string: "테스트") // 1. 이미지 첨부 객체 생성 
let attachment = NSTextAttachment() 
attachment.image = UIImage(named: "testImage") // 2. 이미지 크기 지정 
attachment.bounds = CGRect(x: 0, y: 0, width: 18, height: 18) // 3. NSAttributedString으로 변환 후 append let attachmentString = NSAttributedString(attachment: attachment) mutableAttributedString.append(attachmentString) // 
4. UILabel에 적용 label.attributedText = mutableAttributedString

 

위 코드를 실행하면 UILabel의 "테스트" 텍스트 뒤에 18x18 크기의 이미지가 붙게 됩니다.
즉, "테스트 [이미지]" 형태로 자연스럽게 표현할 수 있죠.

 

NSTextAttachment를 사용하면 UILabel 내부에 쉽게 이미지를 삽입할 수 있습니다.
별도의 UIImageView를 두고 AutoLayout으로 정렬하는 방식보다 훨씬 간단하면서도 깔끔하다는 장점이 있습니다.

👉 커스텀 폰트 크기나 줄 간격에 따라 이미지의 위치가 어색해질 수 있으니, bounds의 y 값을 조정해 정렬을 맞추면 더 자연스러운 결과를 얻을 수 있습니다.