我尝试使用以下代码查找某些字符串的大小:
NSAttributedString *attributedString = ...// Actually system font, 13 pt.
NSSize size = ...// Actually more than string size
NSTextContainer *textContainer = [[NSTextContainer alloc] initWithContainerSize:size];
[textContainer setLineFragmentPadding:0.0];
NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init];
[layoutManager setTypesetterBehavior:NSTypesetterBehavior_10_2_WithCompatibility]; // Setting up different typeSetterBehavior would not fixes the size issue
[layoutManager addTextContainer:textContainer];
NSTextStorage *textStorage = [[NSTextStorage alloc] initWithAttributedString:attributedString];
[textStorage addLayoutManager:layoutManager];
// Layout manager performs layout lazily, force it to lay out the text
[layoutManager glyphRangeForTextContainer:textContainer];
NSSize textSize = [layoutManager usedRectForTextContainer:textContainer].size;
此时,textSize
表示某些字符串!少于字符串需要。例如,对于“看起来不像字符串值”。返回大小的字符串只能绘制“看起来不像字符串”,但对于@“看起来不像字符串值。这是一个数字。”字符串一切都好。
当我收到字符串大小时,所有相同的情况都发生在:
[attributedString boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin].size
或
NSRange glyphRange = [layoutManager glyphRangeForTextContainer:textContainer];
NSSize textSize = [layoutManager boundingRectForGlyphRange:glyphRange inTextContainer:textContainer].size;
任何人都可以解释一下我为什么会收到一些错误的字符串?
感谢。
答案 0 :(得分:4)
我猜测当您创建显示文字的视图时,您忽略了NSTextField
和NSTextView
两个文本都会从其框架中插入一些内容。
例如,如果您使用的是textView,请将textContainerInset
设置为NSZeroSize
,看看是否效果更好。