>

우리는 다이나믹 UILabel 글꼴 (한 줄)을 만드는 방법을 알고 있습니다-

lbl.adjustsFontSizeToFitWidth = true
 lbl.numberOfLines = 1
 lbl.minimumScaleFactor = 0.1
 lbl.baselineAdjustment = UIBaselineAdjustment.AlignCenters
 lbl.textAlignment  = NSTextAlignment.Center

문제는 주어진 각 문자열에 대해 다른 결과를 제공한다는 것입니다. 예를 들어 문자열 "Hello" 가있는 경우  그리고 "Hello World"  계산 된 글꼴 크기가 다릅니다. 모든 문자열에 대해 단일 크기의 동적 글꼴을 만들어야합니다.

내 프로젝트의 예 :

카메라 효과가 내장 된 iPhone 6의 예 (모든 UILabels 글꼴 크기가 일치하는 것을 볼 수 있음) :

내가 생각한 바는 무엇입니까?

기본적으로 나는 내가 가진 가장 큰 문자열이 무엇인지 안다. 그래서 나는 주어진CGSIze에서가장 큰 문자열에 대한글꼴 크기를 어떻게 계산하는지 (효과적인 방법으로) 생각하고있었습니다. 따라서 항상 경계에 머무 릅니다.모든 제안이 있으십니까?


  • 답변 # 1

    당신이 한 말입니다 :

    lbl.minimumScaleFactor = 0.1
    
    

    이 줄은의미를 의미합니다. "iOS, 폰트를 줄이려는 느낌이 든다면 계속해서 줄이십시오." 원하지 않으면 말하지 마십시오.

    대신, 폰트 크기를 고르십시오. 어떤 크기? NSString은 주어진 글꼴/크기로 그려진 문자열의 크기를 알려줍니다. 따라서 가장 긴 줄을 잡고 원하는 공간에 맞는 것을 찾을 때까지 다른 크기로 순환하십시오.

    나만의 가치를 여기에 넣기 :

       func fontSizeToFit(s:String, fontName:String, intoWidth w:CGFloat) -> CGFloat? {
            let desiredMaxWidth = w
            for i in (8...20).reverse() {
                let d = [NSFontAttributeName:UIFont(name:fontName, size:CGFloat(i))!]
                let sz = (s as NSString).sizeWithAttributes(d)
                if sz.width <= desiredMaxWidth {
                    return(CGFloat(i))
                }
            }
            return nil
        }
        print(fontSizeToFit("Transferation", fontName:"GillSans", intoWidth:50)) // 9.0
    
    

    (이전에 글꼴을 축소 할 수있는 우아한 문자열 그리기 기능이 있었으며NSString은 얼마나 많이 줄 었는지 알려줄 것입니다. 사용하지 않는 것이 좋습니다.)

관련 자료

  • 이전 javascript - angularjs에서 양식 데이터와 함께 여러 개의 파일을 보내는 방법
  • 다음 r - 구분 된 복합 열 병합