5

我正在尝试使用 NSTextField 以编程方式创建标签,但结果很模糊:screenshot

到目前为止,这是我的代码:

NSTextfield *textfield = [[NSTextField alloc] initWithFrame:NSMakeRect(5,5,150,20)];
[texField setStringValue:@"some text here"];
[textField setEditable:NO];
[textField setSelectable:NO];
[textField setBordered:NO]
[textField setDrawsBackground:NO]

我已将问题追溯到 setDrawsBackground 行。我也尝试过使用 [textField setBackgroundColor:[NSColor clearColor] ,但没有运气。

顺便说一句,我已将 textField 添加到作为滚动视图子视图的视图的子视图中。我也在所有视图级别上玩过 isOpaque ,但又没有运气了。

任何帮助是极大的赞赏。

4

8 回答 8

9

如果您没有背景(包括透明)并且您的文本是任何支持图层的超级视图的子视图(您已在代码或 IB 中打开“想要图层”以允许动画/过渡),您将获得模糊的文本。您必须选择无图层支持的视图或具有纯色背景颜色的标签。

于 2010-10-12T19:00:16.267 回答
6

我有同样的问题,但我已经解决了:

textfield.canDrawSubviewsIntoLayer = true
于 2017-10-04T15:31:27.763 回答
2

确保您将框架设置为NSTextField所有整数值

roundf()必要时使用。

我变得模糊了NSTextField,无论是添加纯色背景还是从视图层次结构中删除核心动画层都不是我的选择。我注意到我将此文本字段的框架设置为 Y 值为 4.5 的值,因此以下更改为我解决了这个问题:

模糊标签:

_label.frame = NSOffsetRect(_labelFrame,
                            -0.5 * (someRect.size.width + someConstant),
                            0.0);

无模糊:

_label.frame = NSOffsetRect(_labelFrame,
                            roundf(-0.5 * (someRect.size.width + someConstant)),
                            0.0);

(在上面的示例中,_labelFrameandsomeRectNSRects,并且someConstant是 a CGFloat。如您所见,我在第一个示例的第二行中所做的计算是将一个非整数值传递给NSOffsetRect)。

于 2015-04-14T18:10:07.483 回答
0

由于这是我第一次继承 NSView,所以我将上面的代码放在drawRect方法中,而不是initWithFrame方法中。我这样做是因为我正在关注 Apple 开发网站上的示例应用程序之一。

当我滚动时,这也导致我的 CPU 使用率飙升

于 2010-10-12T22:41:42.300 回答
0

如果您通过 XIB 创建它并且它是模糊的,我找到了修复:

[textField setStringValue:@""];

如果我对此发表评论,它会变得模糊;如果放回去它是晶莹剔透的。

于 2011-01-08T03:13:35.327 回答
0

在下面试试这个:

textField.drawsBackground = true
textField.backgroundColor = NSColor.white.withAlphaComponent(.leastNormalMagnitude)
于 2018-12-10T06:19:12.030 回答
0

开箱即用,但值得一提。我浪费了一整天的时间来调试这个问题。我使用的是非苹果外接显示器,这就是问题所在。一旦我在 Mac book pro 中打开该应用程序,它就很好了。所以,我使用的三星显示器可能是非视网膜的。

于 2019-04-18T11:24:05.003 回答
0

简单地说,添加

CanDrawConcurrently = true 

来自 InterfaceBuilder 的属性

于 2020-11-25T14:04:50.377 回答