使用NSTextField创建标签非常模糊

问题描述 投票:5回答:7

我正在尝试使用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,但再没有运气。

任何帮助是极大的赞赏。

objective-c cocoa nstextfield
7个回答
7
投票

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


3
投票

我有同样的问题,但我通过以下方式解决了这个问题:

textfield.canDrawSubviewsIntoLayer = true

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);

(在上面的例子中,_labelFramesomeRectNSRects,而someConstantCGFloat。正如你所看到的,我在第一个例子的第二行中进行的计算是将非整数值传递给NSOffsetRect)。


0
投票

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

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


0
投票

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

[textField setStringValue:@""];

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


0
投票

试试这个:

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

0
投票

开箱即用,但值得一提。我整天都在浪费调试问题。我正在使用非苹果外部显示器,这是确定问题的地方。一旦我在Mac book pro中打开应用程序,它就完美了。因此,我使用的三星显示器可能是非视网膜。

© www.soinside.com 2019 - 2024. All rights reserved.