2016-09-15 2 views
0

I UILabel의 설정하려면 다음 코드가 있습니다어떻게 UILabel의 텍스트의 실제 폭을 얻을 수

let label = UILabel() 
label.numberOfLines = 0 
label.textAlignment = .center 
label.lineBreakMode = .byWordWrapping 
label.preferredMaxLayoutWidth = maxWidth 

label.text = "String that is long enough to cause word wrap." 

label.sizeToFit() 
self.view.addSubview(label) 

나는 그것이처럼 레이블 텍스트를 포장하는 것입니다 필요한 결과를 일단 label.preferredMaxLayoutWidth에 도달하면 실제 포장 된 텍스트에 맞게 충분히 넓게 조정됩니다. 여기에 설명 할 다이어그램이 있습니다 : enter image description here

빨간색 상자의 너비는 label.preferredMaxLayoutWidth과 같으며 이것이 위의 코드에서 얻은 실제 크기입니다. 블랙 박스는 내가 좋아할만한 크기입니다. 레이블의 크기가 빨간색인지 검은 색인지에 관계없이 단어 줄 바꿈이 동일합니다.

그래서 현재 단어 줄 바꾸기를 유지하면서 가능한 가장 작은 너비로 라벨의 크기를 조정할 수 있습니까?

편집 :

제약은 일반적인 옵션이 될 수도 있지만, 내 경우, 나는이 라벨의 결과 크기에 따라 내 수퍼 크기를 조정하고 있기 때문에 생각하지 않습니다.

+0

당신이 [플러시 공간 (찾고 계십니까 http://www.thedesigncubicle.com/2008/12/tiny-tutorial-improve -justified-type-settings /)? (* 플러쉬 스페이스 추가하기 섹션을 참조하십시오.) – paulvs

+0

문자열의 필요한 크기를 얻기 위해 NSString boundingRectWithSize : options : attributes : context :'(또는'String'을위한 Swift와 동등한 것)을 사용하십시오. – rmaddy

+0

@paulvs 아니, 나는 그것이 같은 것을 말하고 있다고 생각하지 않는다. –

답변

1

좋아, 나는 그것을 알아 냈다. @rmaddy는 위의 질문에 대한 설명에서 정확했습니다. 질문을하기 전에 boundingRectWithSize:options:attributes:context:을 보았지만 문제를 신속하게 파악했습니다. 그러나 지금 나는 그것을 얻었다. 여기 내 업데이트 된 코드입니다 :

하자 라벨 = UILabel의()

let text = "String that is long enough to cause word wrap." 
    let rect = text.boundingRect(with: CGSize(width: maxDesiredWidth, height:CGFloat.greatestFiniteMagnitude), options: NSStringDrawingOptions.usesLineFragmentOrigin, attributes: nil, context: nil) 

    label.numberOfLines = 0 
    label.textAlignment = .center 
    label.lineBreakMode = .byWordWrapping 
    label.frame = rect 

    label.text = text 

    label.sizeToFit() 
    self.view.addSubview(label) 
관련 문제