Creating a label using NSTextField is blurry

我与影子孤独终老i 提交于 2019-12-01 05:27:41

If you have no background (including clear) and your text is a subview of any layer-backed superview (you've turned on "wants layer" in code or in IB to allow animations/transitions), you'll get blurry text. You have to choose either no layer backed view or a label with a solid background color.

I had the same problem, but I have solved it by:

textfield.canDrawSubviewsIntoLayer = true

Make sure you're setting the frame of your NSTextField to something with all integer values.

Use roundf() if necessary.

I was getting a blurry NSTextField, and neither adding a solid background nor removing Core Animation layers from my view hierarchy were options for me. I noticed I was setting the frame of this text field to something with a Y value of 4.5, so the following changes fixed the issue for me:

Blurry label:

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

No blur:

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

(In the above examples, _labelFrame and someRect are NSRects, and someConstant is a CGFloat. As you can see, the calculation I was doing in the second line of the first example was passing a non-integer value to NSOffsetRect).

Since this was my first time subclassing NSView, I had put the above code in the drawRect method instead of the initWithFrame method. I did this because I was following one of the sample applications from Apple's Dev site.

This was also causing my CPU usage to spike when I was scrolling

Casey E

If you created it via an XIB and it is blurry, I found the fix:

[textField setStringValue:@""];

If I comment this out it goes blurry; if put back it's crystal clear.

Try this below:

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

Out of the box, but worth to mention. I have wasted by entire day debugging the issue. I am using a non-apple external monitor and this is where the issue is identified. Once i open the app in Mac book pro, it is perfectly fine. So, the Samsung monitor which i am using might be non-retina.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!