我相信我找到了这个问题的解决方案,根据上面的原始发布者的 cmets 似乎没有解决。
我有一个可选择但不可编辑的 NSTextField。文本是通过创建具有字体和文本颜色属性的 NSAttributedString 来设置的,并将其传递给 NSTextField 的 setAttributedStringValue 方法。
在我单击一个文本字段然后单击另一个文本字段之前,文本的行距是错误的,如下面的 GIF 所示。单击完成后,文本会正确显示。
在编辑前后检查 NSTextField 的文本属性时,我注意到 NSOriginalFont 设置为 .AppleSystemUIFont 12pt 而不是我的字体,即 Helvetica Neue 11pt。
之前
NSFont = "\"HelveticaNeue 11.00 pt. P [] (0x600000e46400) fobj=0x1040163d0, spc=3.06\"";
NSOriginalFont = "\".AppleSystemUIFont 12.00 pt. P [] (0x600000d8f0f0) fobj=0x10361b1a0, spc=3.39\"";
之后:
NSFont = "\"HelveticaNeue 11.00 pt. P [] (0x600000e46400) fobj=0x1040163d0, spc=3.06\"";
NSOriginalFont = "\"HelveticaNeue 11.00 pt. P [] (0x600000e46400) fobj=0x1040163d0, spc=3.06\"";
我通过设置 NSAttributedString 的字体属性解决了这个问题,不仅是 NSFontAttributeName(即@"NSFont")而且 @"NSOriginalFont"。
[controlText removeAttribute:NSFontAttributeName range:(NSMakeRange(0, len))];
[controlText addAttribute:NSFontAttributeName value:font range:(NSMakeRange(0, len))];
[controlText removeAttribute:@"NSOriginalFont" range:(NSMakeRange(0, len))];
[controlText addAttribute:@"NSOriginalFont" value:font range:(NSMakeRange(0, len))];