以编程方式添加的UILabel模糊不清

18

我正在向一个用于加载目的的视图中添加UILabel。然而,当我添加后,它变得模糊了。

奇怪的是,我使用几乎相同的代码为在UITableViewController上加载的视图创建了一个loading视图,并且在那里它运行得很好。但是,在UIViewController顶部的这个视图上却很模糊。

以下是我的代码:

float x = (self.view.frame.size.width-20)/2;
float y = (self.view.frame.size.height-70)/2;

// Add loading and sub text
UILabel *loadingText = [[UILabel alloc] initWithFrame:CGRectMake(10, round(y+30), round(self.view.frame.size.width-20), 21)];
[loadingText setTextAlignment:UITextAlignmentCenter];
[loadingText setNumberOfLines:0];
[loadingText setFont:[UIFont systemFontOfSize:17]];
[loadingText setText:NSLocalizedString(@"Please wait...\nWe are processing your request", @"LoadingPage")];
[loadingText sizeToFit];
[loadingText setBackgroundColor:[UIColor clearColor]];
[loadingText setCenter:self.view.center];
[loadingText setTag:2];

[view addSubview:loadingText];
3个回答

59

标签模糊是因为该框架使用浮点数。

为了强制帧使用整数值,请执行以下操作:

[loadingText setFrame:CGRectIntegral(loadingText.frame)];

你也可以将框架中所有的值都转换为int,但CGRectIntegral会帮助你完成所有工作。


1
#define CGPointIntegral(point) CGPointMake((int)point.x,(int)point.y) 是一个快速的宏,用于将CGPoint成员转换为整数。 - user836263
1
对我没用...所有的superview都需要使用CGRectIntegral布局吗? - ilmiacs
嗨,当我添加CGRectIntegral到NSZombie事件时,我得到了模糊的文本。 - Sandeep Khade
尝试将包含标签的父视图布局。如果父视图本身使用了浮点数,那么您的标签可能会模糊(尽管我从未看到过这种行为)。 - NSZombie
对我来说很有效,当然,如果你觉得这很重要,你可以直接在UILabel初始化中使用CGRectIntegral来节省一行代码:initWithFrame:CGRectIntegral(CGRectMake(yourXpos, yourYpos, yourWidth, yourHeight)) - Animal451
显示剩余3条评论

16
除了浮点数/整数问题外,调用setShouldRasterize方法在UILabel的父视图上也可能导致出现这个问题。

这是解决我的方法。谢谢。 - user1898712

3

对于那些无法使用之前的答案的人,我发现如果关闭autoresizingmask功能,它会调用setShouldRasterize方法。

[loadingText setTranslatesAutoresizingMaskIntoConstraints:NO];

因此,如果您将此行注释掉,它将正确地显示。

在我的情况下,我必须同时应用这个和被接受的答案。 - MyounghoonKim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接