iOS, Swift/Feature
Swift ) Html to AttributedString - EEYatHo iOS
EEYatHo
2022. 4. 4. 13:27
반응형
Html 문법을 지원하는0 NSMutableAttributedString 생성자
NSMutableAttributedString(
data: data, // htmlString -> data
options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding:String.Encoding.utf8.rawValue],
documentAttributes: nil
)
Html String -> NSMutableAttributedString 기본형
func htmlToAtt(htmlStr: String) -> NSMutableAttributedString? {
guard let data = htmlStr.data(using: .utf8) else {
return nil
}
guard let att = try? NSMutableAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding:String.Encoding.utf8.rawValue], documentAttributes: nil) else {
return nil
}
return att
}
Font, Size, Color, Align 적용
func htmlToAtt(htmlStr: String) -> NSMutableAttributedString? {
let newHTML = String(format: """
<div style="text-align: center;">
<span style="
font-family: '-apple-system', 'AppleSDGothicNeo-Regular';
font-size: 16;
color: rgb(255,255,255);
">%@</span>
</div>
""", htmlStr)
guard let data = newHTML.data(using: .utf8) else {
return nil
}
guard let att = try? NSMutableAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding:String.Encoding.utf8.rawValue], documentAttributes: nil) else {
return nil
}
// align 적용시 자꾸 끝에 줄바꿈이 생김. 아직 원인을 모르겠음..
if att.string.last == "\n" {
return att.attributedSubstring(from: NSRange(location: 0, length: att.length - 1)) as? NSMutableAttributedString
} else {
return att
}
}
필요한 태그로 기존의 htmlStr을 감싸는 원리.
align를 적용할 때 자꾸 끝에 줄바꿈(\n)이 생겨서 제거하는 코드도 추가되었다. 원인 파악하면 수정.