Objective c 使用NSTextField创建标签很模糊
我尝试使用NSTextField以编程方式创建标签,但结果很模糊: 这是我目前的代码:Objective c 使用NSTextField创建标签很模糊,objective-c,cocoa,nstextfield,Objective C,Cocoa,Nstextfield,我尝试使用NSTextField以编程方式创建标签,但结果很模糊: 这是我目前的代码: NSTextfield *textfield = [[NSTextField alloc] initWithFrame:NSMakeRect(5,5,150,20)]; [texField setStringValue:@"some text here"]; [textField setEditable:NO]; [textField setSelectable:NO]; [textField setBord
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],但没有成功
顺便说一下,我在scrollview的子视图中添加了一个文本字段。我也在所有视图级别上使用了isOpaque,但还是没有运气
非常感谢您的帮助。如果您没有背景(包括清晰),并且您的文本是任何以层为背景的superview的子视图(您已经在代码或IB中启用了“想要层”以允许动画/过渡),您将得到模糊的文本。您必须选择无图层背景视图或具有纯色背景的标签。由于这是我第一次对NSView进行子类化,因此我将上述代码放在drawRect方法中,而不是initWithFrame方法中。我之所以这样做,是因为我在跟踪苹果开发网站上的一个示例应用程序
当我滚动时,这也导致我的CPU使用率急剧上升如果您通过XIB创建它,并且它很模糊,我发现了修复方法:
[textField setStringValue:@""];
如果我把它注释掉,它会变得模糊;如果放回去,它会非常清晰。请确保将
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);
(在上述示例中,
\u labelFrame
和someRect
是NSRect
s,而someConstant
是一个CGFloat
。如您所见,我在第一个示例的第二行中所做的计算是将一个非整数值传递给NSOffsetRect
).我也有同样的问题,但我通过以下方式解决了它:
textfield.canDrawSubviewsIntoLayer = true
请尝试以下操作:
textField.drawsBackground = true
textField.backgroundColor = NSColor.white.withAlphaComponent(.leastNormalMagnitude)
开箱即用,但值得一提。我浪费了一整天的时间调试这个问题。我使用的是非苹果外部显示器,这就是问题所在。一旦我在Mac book pro中打开应用程序,它就完好无损了。 因此,我使用的三星显示器可能是非视网膜显示器。简单地说,添加
CanDrawConcurrently = true
来自InterfaceBuilder的属性感谢您的回复。我最初想到了这一点,但我希望找到更好的解决方案。我尝试在视图中将wantsLayer设置为“否”,但仍然没有成功。我从未见过此问题是由-wantsLayers为“是”以外的任何原因引起的。您确定已爬过整个视图层次结构并使其符合sure全部关闭?您是如何在IB或代码中执行此操作的?如果在代码中,则在哪里/如何执行?我正在通过代码执行此操作。我有以下视图设置:-NSScrollView包含NSView 1。-NSView 1包含NSView 2-NSView 2是在NSTextField中执行此操作的位置。您是说在所有视图级别上将WantLayer设置为“是”吗?我只是尝试了设置“想要”sLayer:所有三个级别都没有,结果相同。现在我的scrollview也包含在拆分视图中,是否也应该设置在该视图上?你确定该对象只存在一次吗?在我看来,似乎有多个副本堆叠在一起。只是一个想法……还有一些其他有用的信息可以找到,这些信息大致来自same时间段作为原始问题。我自己的问题是通过强制在我的NSTextField标签后面绘制一个坚实的背景来解决的(使用带有颜色的“DruckGround”无效)。博客链接是404。为我解决了这个问题。回答很好,谢谢!如果使用CGFloat
let backView=NSView(frame:cgrct(x:(window.frame.size.width/2-150).rounded(),y:(window.frame.size.height/2-150).rounded(),width:300,height:300))
函数NSIntegralRect
就是为此设计的,请参见: