2014-09-27 2 views
1

을 고려하지 크기를 계산 : 여기 boundingRectWithSize : 옵션 : 컨텍스트 : 예를 들어 NSParagraphStyle.firstLineHeadIndent

import Foundation 
import UIKit 

var str = NSString(string: "saldkjaskldjhf") 

var font = UIFont.systemFontOfSize(14.0) 
var attributes:[String:AnyObject] = [NSFontAttributeName: font] 
var attriStrWithoutParagraph = NSAttributedString(string: str, attributes: attributes) 

var size = attriStrWithoutParagraph.boundingRectWithSize(CGSize(width: CGFloat.max, height: CGFloat.max), options: NSStringDrawingOptions.UsesLineFragmentOrigin, context: nil) 

var paragraphstyle = NSMutableParagraphStyle() 
paragraphstyle.firstLineHeadIndent = CGFloat(20) 
attributes[NSParagraphStyleAttributeName] = paragraphstyle 
attriStrWithoutParagraph = NSAttributedString(string: str, attributes: attributes) 
size = attriStrWithoutParagraph.boundingRectWithSize(CGSize(width: CGFloat.max, height: CGFloat.max), options: NSStringDrawingOptions.UsesLineFragmentOrigin, context: nil) 

이 출력됩니다 :

(0.0,0.0,87.276,16.702) 
(0.0,0.0,87.276,16.702) 

우리가 결과가 동일 볼 수 있으므로 firstlineindent 왜 이런 식으로 작동하는지에 고려되지 않습니다 ???

+0

첫 줄을 들여 쓰지 않아도 반드시 경계 사각형이 바뀌지는 않습니다. 단락의 마지막 줄이 다른 줄로 줄 바꿈 된 경우에만 변경됩니다. –

+0

@KenThomases 마지막 줄을 다른 줄로 감싸는 방법? – 0oneo

답변

2

-boundingRectWithSize:options:으로 전달할 크기에 매우 큰 (유효 무한) 값 (CGFloat.max)을 지정하고 있습니다. 따라서 텍스트는 절대로 감싸지 않습니다. 그것은 항상 하나의 긴 줄에 배치됩니다.

은 또한 -boundingRectWithSize:options: 용 문서 말 :

이 방법에서 리턴 직사각형의 원점 제 글리프 기원이다.

따라서 결과는 항상 첫 번째 글리프가 배치되는 위치를 기준으로합니다. 기본적으로 선의 크기를 측정하고 있습니다. 들여 쓰기는 행의 크기를 변경하지 않습니다. 첫 번째 글리프가 배치되는 위치는 변경되지만 결과는 첫 번째 글리프와 관련되므로 결과는 변경되지 않습니다.

너비에 대한 실제 제한을 제공하고 단락을 감싸는 경우 결과가 변경됩니다. 이 경우 두 번째 줄은 첫 번째 줄 (및 첫 번째 글자)에 상대적으로 "돋보이게"되므로 firstLineHeadIndent을 바꿀 때 바운딩 사각형이 변경됩니다.

원하는 들여 쓰기를 직접 적용 할 수 있습니다. 즉, 바운딩 직사각형을 얻은 후 원점의 X 좌표에 들여 쓰기 거리를 추가하십시오 (편집 : 또는 들여 쓰기로 배치 된 텍스트뿐만 아니라 들여 쓰기를 포함하는 rect를 원하면 너비에 추가). ("무한"공간에서 텍스트를 들여 쓰는 것이 무슨 뜻인지는 분명하지 않지만).

원하는 대상의 실제 경계 크기를 제공 할 수도 있습니다.