我正在努力使我的NSWindow可以自动化。我已经将大部分UI项目调整大小,但是造成问题的少数剩余对象之一是NSTextViews:实际上,一旦NSTextView调整大小,我找不到计算新字体大小的方法。
对于NSTextFields,我找到了一种方法,可以根据文本的长度找到字体大小。显然,似乎没有一个等效的多行文本容器方法(除非我没有找到它)。
我找到的唯一一个提到类似内容的地方是:http://boutcher.tumblr.com/post/7842216960/nstextview-auto-resizing-text
但是,我无法在我的应用程序中实现此代码,因为似乎有一个错误我无法修复NSLayoutManager的创建方式。
过去有没有人这样做过?我正在考虑只允许用户调整只一个大小,所以我可以对字体大小进行硬编码......处理这些NSTextViews真的很痛苦!
答案 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。