通过将字体大小减小50%来使用NSAttributedString调整NSTextView的大小,但TextView的框架减少不到50%

时间:2015-11-12 21:05:09

标签: macos cocoa nsattributedstring nstextview

我正在添加一项功能,允许用户调整视图的大小,其中包含NSTextView

NSTextView包含NSAttributedString

例如,如果我想将视图调整50%:

  • 我首先将容器视图的框架减少50%
  • 然后我将NSTextView的框架缩小了50%
  • 然后我在NSFont上将字体大小减小了50%,并将其应用到我的NSAttributedString

enter image description here enter image description here

然而,正如您所看到的,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%。但我什么也看不见

1 个答案:

答案 0 :(得分:0)

这可能不是一个完整的答案,但我的看法是:字体是复杂的东西。它们包含字母对之间的字距调整等内容,可根据文本的磅值而变化。可能还有其他间距,因为您没有考虑到;例如,文本容器边距怎么样?但即使您考虑了通过API可访问的所有间距,您仍可能无法实现,因为字体指标及其对点大小的潜在依赖性。也许一种更好的方法可能是使用NSTextView实际更改包围scaleUnitSquareToSize:的视图的坐标系;这可能会更可靠地调整事物。

相关问题