自动调整NSTextView及其字体大小

时间:2012-01-28 16:00:34

标签: objective-c cocoa resize nstextview autoresize

我正在努力使我的NSWindow可以自动化。我已经将大部分UI项目调整大小,但是造成问题的少数剩余对象之一是NSTextViews:实际上,一旦NSTextView调整大小,我找不到计算新字体大小的方法。

对于NSTextFields,我找到了一种方法,可以根据文本的长度找到字体大小。显然,似乎没有一个等效的多行文本容器方法(除非我没有找到它)。

我找到的唯一一个提到类似内容的地方是:http://boutcher.tumblr.com/post/7842216960/nstextview-auto-resizing-text

但是,我无法在我的应用程序中实现此代码,因为似乎有一个错误我无法修复NSLayoutManager的创建方式。

过去有没有人这样做过?我正在考虑只允许用户调整一个大小,所以我可以对字体大小进行硬编码......处理这些NSTextViews真的很痛苦!

1 个答案:

答案 0 :(得分:1)

请参阅“NSString Application Kit Additions Reference”中的sizeWithAttributes:方法。

它返回一个NSSize,您可以将其与textview的当前frame.size进行比较。

对于“Attributes”,arg创建一个NSDictionary,其中NSFont作为对象,NSFontAttributeName作为键。 (不要被那个常量混淆。它看起来像是一个字符串的键,但它不是;它是字体本身的一个键。)

从textview获取字符串:[[yourTextView textStorage] string]。 获取您正在使用的字体的familyName及其当前磅值,即CGFloat。使用构造函数[NSFont fontWithName:familyName size:floatChanged]撰写要测试的字体。

到达正确大小的字体后,使用它从旧字符串中生成新的NSAttributedString。只需使用上面创建的“属性”字典(生成正确大小的字典)并将其提供给NSAttributedString的initWithString:attributes构造函数。

将该属性字符串分配给textStorage(本身是NSMutableAttributedString的子类):[[yourTextView textStorage] setAttributedString:thatYouJustMade]

注意:如果textview使用下划线或前/后着色或斜体/粗体字体等属性,则必须从textStorage获取该信息并将其合并到新的属性字符串中。这是可行的。查看NSAttributedString和NSMutableAttributedString的类refs。

相关问题