我正在添加一项功能,允许用户调整视图的大小,其中包含NSTextView
。
NSTextView
包含NSAttributedString
。
例如,如果我想将视图调整50%:
NSTextView
的框架缩小了50%NSFont
上将字体大小减小了50%,并将其应用到我的NSAttributedString
然而,正如您所看到的,NSAttributedString
占用的帧不会完美地减少50%。你可以告诉我,因为每一行都有溢出到下一行的字符
起初我想也许我错过了NSAttributedString
上的一个属性,我还需要减少50%,所以我注销了所有属性:
2015-11-12 15:54:13.959 Snagit[48707:8030724] BEFORE RESIZE {
NSColor = "NSCalibratedRGBColorSpace 0 0 0 1";
NSFont = "\"Helvetica 70.00 pt. P [] (0x610000056530) fobj=0x6000001f7300, spc=19.45\"";
NSParagraphStyle = "Alignment 2, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 0/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n 28L,\n 56L,\n 84L,\n 112L,\n 140L,\n 168L,\n 196L,\n 224L,\n 252L,\n 280L,\n 308L,\n 336L\n), DefaultTabInterval 0, Blocks (null), Lists (null), BaseWritingDirection -1, HyphenationFactor 0, TighteningFactor 0.05, HeaderLevel 0";
}
2015-11-12 15:54:13.960 Snagit[48707:8030724] ADDING FONT {
NSColor = "NSCalibratedRGBColorSpace 0 0 0 1";
NSFont = "\"Helvetica 35.00 pt. P [] (0x610000247a10) fobj=0x6000001f6900, spc=9.74\"";
NSParagraphStyle = "Alignment 2, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 0/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n 28L,\n 56L,\n 84L,\n 112L,\n 140L,\n 168L,\n 196L,\n 224L,\n 252L,\n 280L,\n 308L,\n 336L\n), DefaultTabInterval 0, Blocks (null), Lists (null), BaseWritingDirection -1, HyphenationFactor 0, TighteningFactor 0.05, HeaderLevel 0";
}
如您所见,看似重要的属性是NSFont
属性。字体大小和“spc
”似乎完全减半。
然而,观点仍然不是一半的大小。
我可以添加一个“幻数”并使新大小略小于50%,但我觉得这只是掩盖了一个潜在的问题,如果用户调整大小可能会有问题,例如200%
我完全有可能错过一些非常明显的东西,但我现在很难过。可能是什么问题呢?我最接近的猜测是,我缺少一个文本属性(字距调整或其他东西),需要减少50%。但我什么也看不见
答案 0 :(得分:0)
这可能不是一个完整的答案,但我的看法是:字体是复杂的东西。它们包含字母对之间的字距调整等内容,可根据文本的磅值而变化。可能还有其他间距,因为您没有考虑到;例如,文本容器边距怎么样?但即使您考虑了通过API可访问的所有间距,您仍可能无法实现,因为字体指标及其对点大小的潜在依赖性。也许一种更好的方法可能是使用NSTextView
实际更改包围scaleUnitSquareToSize:
的视图的坐标系;这可能会更可靠地调整事物。