gpt4 book ai didi

objective-c - 自动调整 NSTextView 的大小及其字体大小

转载 作者:行者123 更新时间:2023-12-03 16:43:37 28 4
gpt4 key购买 nike

我正在尝试让我的 NSWindow 自动调整大小。我已经调整了大部分 UI 项目的大小,但剩下的几个造成问题的对象之一是 NSTextView:事实上,一旦调整了 NSTextView 的大小,我就找不到计算新字体大小的方法。

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

我发现的唯一实际提到此类内容的地方是:http://boutcher.tumblr.com/post/7842216960/nstextview-auto-resizing-text

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

过去有人这样做过吗?我正在考虑只允许用户将大小调整为<​​em>只是一个大小,这样我就可以对字体大小进行硬编码...处理这些 NSTextView 真的很痛苦!

最佳答案

请参阅“NSString 应用程序工具包添加引用”中的 sizeWithAttributes: 方法。

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

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

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

一旦获得正确大小的字体,就可以使用它从旧字符串中创建一个新的 NSAttributedString。只需使用上面制作的“attributes”字典(生成正确大小的字典)并将其提供给 NSAttributedString 的 initWithString:attributes 构造函数即可。

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

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

关于objective-c - 自动调整 NSTextView 的大小及其字体大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9046628/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com