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 не учитывается, почему он работает так???
1 ответ
Вы указываете очень большие (фактически бесконечные) значения (CGFloat.max
) для размера, который вы передаете -boundingRectWithSize:options:
, Таким образом, текст никогда не будет переноситься. Он всегда будет выложен в одну длинную очередь.
Кроме того, документы для -boundingRectWithSize:options:
сказать:
Источник прямоугольника, возвращаемый этим методом, является первым источником глифа.
Таким образом, результат всегда зависит от того, где находится первый глиф. Вы в основном измеряете размер линии. Отступ не меняет размер строки. Он изменяется там, где находится первый глиф, но результат относительно первого глифа, поэтому он не меняет результат.
Это изменило бы результат, если бы вы указали реальный предел ширины и сделали перенос абзаца. В этом случае вторая строка будет "отступать" относительно первой строки (и первого глифа), поэтому ограничительный прямоугольник будет меняться при изменении firstLineHeadIndent
,
Вы можете просто применить желаемый отступ самостоятельно. То есть после того, как вы получите ограничивающий прямоугольник, добавьте расстояние отступа к координате X начала координат (отредактируйте: или к ширине, если вы хотите, чтобы прямоугольник охватывал отступ, а не только текст, расположенный в отступе). (Хотя мне не ясно, что может означать отступ текста в "бесконечном" пространстве.)
Вы также можете указать фактический размер текста для желаемого места назначения.