EEYatHo 앱 깎는 이야기

Swift ) Html to AttributedString - EEYatHo iOS 본문

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)이 생겨서 제거하는 코드도 추가되었다. 원인 파악하면 수정.

Comments