2016-07-15 2 views
1

내 백엔드에서 오는 HTML 문자열을 textView, 에 대해 NSAttributedString으로 변환하려고하지만 글꼴 자체를으로 설정하고 싶습니다. 그러나이 내 상황에서 불가능Swift : 사용자 정의 글꼴로 HTML에서 문자열 작성

<p><strong>Title</strong></p> <p><strong>Extra info ..</strong></p><p>- Some more info</p> <p>- Contact</p> 

일부에 유래 주제는 서버 백엔드에서 글꼴을 설정하는 것이 좋습니다 : 여기

내 서버에서 오는 HTML 문자열의 예입니다.

내가 NSAtrributedString을 만드는 방법에 대한 온라인 검색하십시오 WebView 또는 NSAttributedString을 사용하여, 나는 어떤 이유로 두 번째로 갔다.

이 방법은 작동
func setHTMLFromString() -> NSAttributedString{ 
    let attrStr = try! NSMutableAttributedString(
     data: self.dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: true)!, 
     options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], 
     documentAttributes: nil)  
    return attrStr 
} 

그러나 내가 내 텍스트 뷰에 설정 한 기본 시스템 글꼴을 오버라이드 (override) : 나는 NSAttributedString은으로 내 HTML 문자열을 변환하려면 다음 방법을 사용합니다. 그래서 속성으로 글꼴을 추가하는 시도 :

func setHTMLFromString() -> NSAttributedString{ 
    let attrStr = try! NSMutableAttributedString(
     data: self.dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: true)!, 
     options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], 
     documentAttributes: nil) 

    if #available(iOS 8.2, *) { 
     attrStr.addAttributes([NSFontAttributeName : UIFont.systemFontOfSize(16.0, weight: UIFontWeightThin), 
      NSForegroundColorAttributeName: UIColor(rgb: 0x555555)], range: NSMakeRange(0, attrStr.length)) 
    } else { 
     attrStr.addAttributes([NSFontAttributeName : UIFont.systemFontOfSize(16.0), 
      NSForegroundColorAttributeName: UIColor(rgb: 0x555555)], range: NSMakeRange(0, attrStr.length)) 
    } 

    return attrStr 
} 

지금 내가 제대로 보여 않습니다 표시 할 글꼴은, 그러나 모든 HTML 태그가 작동을 멈췄습니다. 누구나 글꼴을 설정하고 HTML 태그를 계속 작동시키는 방법에 대한 해결책이 있습니까?

답변

3

서버에서 HTML을 수신 한 후 속성 문자열에 HTML을 전달하기 전에 HTML에 CSS 글꼴 스타일을 포함시킬 수 있습니다. 글꼴 세부 정보는 CSS 스타일의 문자열 보간을 사용하여 동적으로 설정할 수 있습니다. 텍스트보기의 글꼴을 잡아서 설정할 수 있습니다. 전에 이런 식으로 해봤지만 효과가 있었지만 정말 좋아하지 않아요.

+1

CSS를 가져온 HTML에 포함시킬 수 있어야하지만 "더티"로 느껴질 수 있습니다. 안드로이드에서와 같이 모든 작업을하는 네이티브 HTML 클래스가있는 것처럼 더 좋고/더 쉬운 방법이 없다면 정말 궁금 할 것입니다. 나는이 주제를 약간 기다릴 것이고, 다른 대답이 주어지지 않으면 트릭을하기 때문에이 대답을 받아 들일 것이다. – Hapeki

+0

@Hapeki 완전히 "더러운"느낌에 동의합니다. 당신이 더 좋은 길을 찾으면 나는 흥미가있을 것입니다. –

1

"작동하지 않는"경우 "강한"텍스트가 나머지 텍스트와 동일한 글꼴로 나옵니다. 전체 문자열에 글꼴 속성을 적용한 결과 일뿐입니다. HTML에 의해 원래 설정된 폰트 속성을 오버라이드시킨다. NSAttributedString 특성은 HTML에서와 같은 방식으로 중첩한다고 생각하지 않습니다.

왜 나는 귀착 된 문자열이 처음에 textView에 설정된 기본 글꼴을 무시할 지 모르겠습니다. 예를 들어 버튼의 제목으로 AttributedString을 설정 한 경우에는 보지 못했습니다. HTML에서 특성 문자열로 변환 할 때 기본 글꼴 속성이 도입되어야한다고 생각합니다.

가장 좋은 방법은 무엇인지 모르겠습니다. HTML 사전 변환에 글꼴 스타일을 삽입 하시겠습니까? 그렇지 않으면, 문자열의 속성을 반복 할 수 있고 모든 글꼴 특성을 바꾸거나 바꿀 수 있다고 생각합니다. 그러나 그것은 지저분 해 보입니다.

+0

글꼴 스타일을 추가하여 HTML 문자열의 글꼴이 포함 된 방식으로 문자열을 삽입한다고 가정합니다. 예 : http://stackoverflow.com/a/24653632/6414904 – Hapeki

+0

그래, 그렇게 해. –

관련 문제