使用NSTextField创建标签非常模糊

时间:2010-10-12 18:38:12

标签: objective-c cocoa nstextfield

我正在尝试使用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添加到视图的子视图中,该视图是scrollview的子视图。我也在所有视图级别玩isOpaque,但再没有运气。

非常感谢任何帮助。

8 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:3)

我遇到了同样的问题,但我已经解决了这个问题:

textfield.canDrawSubviewsIntoLayer = true

答案 2 :(得分:1)

确保您将NSTextField的框架设置为所有整数值的内容。

如有必要,请使用roundf()

我得到了一个模糊的NSTextField,既没有添加可靠的背景也没有从我的视图层次结构中删除Core Animation图层。我注意到我将此文本字段的框架设置为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);

(在上面的示例中,_labelFramesomeRectNSRectsomeConstantCGFloat。如您所见,计算I正在第一个例子的第二行做的是将一个非整数值传递给NSOffsetRect)。

答案 3 :(得分:0)

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

当我滚动时,这也导致我的CPU使用量激增

答案 4 :(得分:0)

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

[textField setStringValue:@""];

如果我发表评论,它会变得模糊;如果放回去就很清楚。

答案 5 :(得分:0)

尝试以下操作:

textField.drawsBackground = true
textField.backgroundColor = NSColor.white.withAlphaComponent(.leastNormalMagnitude)

答案 6 :(得分:0)

开箱即用,但值得一提。我整天都在浪费时间调试问题。我使用的是非Apple外部显示器,因此可以确定问题所在。一旦我在Mac book pro中打开该应用程序,它就很好了。 因此,我使用的三星显示器可能不是视网膜显示器。

答案 7 :(得分:0)

简单地添加

SELECT
if((obsolete = 'N' OR instock = 'Y'), 1, 0) AS saleable, *
FROM
product;

InterfaceBuilder的属性