2017-02-07 5 views
0

테이블 셀에 UILabel이 있고 인터페이스 작성기에서 해당 글꼴을 설정했습니다. 셀이 표시 될 때 나는 HTML 문자열을 가져 와서 NSAttributedString으로 변환합니다. 여기서 레이블의 글꼴 유형과 크기를 사용하고 HTML 텍스트의 기본 글꼴로 사용합니다.UITableViewCell의 UILabel이 모든 willDisplayCell에서 글꼴 크기를 두 배로 늘리고 있습니다

문제는 셀을 재사용 할 때마다 레이블의 글꼴 크기가 두 배가된다는 것입니다. 17 점에서 시작하여 34, 68에서 수백만까지입니다 ...

레이블의 글꼴 속성에 아무 것도 설정하지 않았으므로 왜 변경 될 수 있습니까? NSAttributeString로 서식을위한

이 내 문자열 확장 :

public func getHtml2AttributedString(font: UIFont) -> NSAttributedString? { 
    let modifiedString = "<style>body{font-family: '\(font.fontName)'; font-size:\(font.pointSize)px; margin:0; padding:0;}</style>\(self)"; 

    guard let data = modifiedString.data(using: .utf8) else { 
     return nil 
    } 

    do { 
     return try NSAttributedString(data: data, 
            options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue], 
         documentAttributes: nil) 
    } 
    catch { 
     print(error) 
     return nil 
    } 
} 

편집 : 그냥 글꼴은 항상 크기를 두 배로하지 않고 그냥 몇 가지 포인트를 확대 할 수 있다는 것을 발견했다. 또한 체중을 변경할 수 있습니다. 정상에서 굵은 체로.

cellForRowAt 방법은 셀을 대기를 해제하고 반환하고 willDisplay 방법은 추상화의 여러 레이어를 통해이 같은 TT (이가는 작업을 수행하지만이 UI 요소를 접촉하는 유일한 코드입니다. 세포는 하나 개의 라벨이, 아무것도 더)

결국
label.attributedText = htmlString?.getHtml2AttributedString(font: label.font) 
+0

'cellForRowAtIndexPath' 코드를 추가 할 수 있습니까? – Priyal

+0

@Priyal 방금 추가 정보와'willDisplay' 메소드의 핵심을 추가했습니다. – shelll

답변

0

이것은 attributedText 속성을 설정 한 후에는 자동적 attributedText의 속성에 따라 폰트의 속성을 변경하는 것이 상기 UILabel의 "기능"이다. 자세한 내용은 another SO question에서 확인할 수 있습니다.