2016-06-09 2 views
2

UITextView가 있고 글꼴 크기를 변경하고 싶습니다. 그러나 여러 글꼴 크기가있는 파일에서 가져온 이후 비교적 변경되기를 원하며 이에 따라 변경해야합니다. 예를 들어, 글꼴 크기가 36이고 글꼴 크기가 12 인 단어를 가지고 있으며이를 각각 0.75 % ~ 27와 9로 확장하려고합니다.iOS Swift 상대 글꼴 크기

내가하려고하면 :

textview.font = UIFont(name: textview.font.fontName, size: 20) 

는 단지 전체 UITextView 글꼴 크기를 변경합니다.

감사합니다.

+0

파일의 종류는? 파일에서 글꼴을 어떻게 지정하고 있습니까? – brimstone

+0

글꼴 크기가있는 rtf 파일입니다. – Benny

답변

3

당신은이 확장을 사용할 수 있습니다

extension NSAttributedString { 
    @warn_unused_result 
    func scaleBy(scale: CGFloat) -> NSAttributedString { 
    let scaledAttributedString = NSMutableAttributedString(attributedString: self) 
    scaledAttributedString.enumerateAttribute(NSFontAttributeName, inRange: NSRange(location: 0, length: scaledAttributedString.length), options: NSAttributedStringEnumerationOptions(rawValue: 0)) { (value, range, _) in 
     if let oldFont = value as? UIFont { 
      let newFont = oldFont.fontWithSize(oldFont.pointSize * scale) 
      scaledAttributedString.removeAttribute(NSFontAttributeName, range: range) 
      scaledAttributedString.addAttribute(NSFontAttributeName, value: newFont, range: range) 
     } 
    } 
    return scaledAttributedString 
    } 
} 

그럼 그냥 전화 같은 :

textField.attributedText = textField.attributedText!.scaleBy(0.5) 

예 :

Example in playground

+0

파일의 맨 아래에 확장을 추가하고 시도했지만 아무 것도하지 않는 것 같습니다 ... – Benny

+0

확장은'NSAttributedString'에'scaleBy' 함수를 추가합니다. 이 함수를 사용하여 (예에서와 같이) 'UITextView'의'attributedString' 속성의 전체 내용을 스케일 할 수 있습니다. – Daniel

+0

@Benny는'scaleBy'의 결과를'textView.attributedText'에만 지정해야한다는 점에 유의하십시오. 'scaleBy' 호출은 아무런 효과가 없습니다. – Daniel

0

각 텍스트 요소의 글꼴 크기 데이터를 추출 할 수있는 서식있는 텍스트 형식 파일 용 구문 분석기 (대부분이 경우 \fsN 태그 일 것입니다)를 작성하거나 찾은 다음 해당 번호를 사용하십시오 (0.75 곱하기)를 사용하여 각 단어 또는 구의 크기를 개별적으로 설정합니다. 서로 다른 크기의 단어를 단일 문자열로 재조합해야하는 경우 특성이 지정된 문자열을 사용할 수 있지만 각 단어 나 구가 별도의 레이블에있는 경우에는 필요하지 않습니다.

개인적으로 나는 원본 데이터의 글꼴 크기를 무시하고 옵션 인 경우 멋진 모양의 앱 내에 레이아웃을 부과합니다.