UITextField模糊文本

Mik*_*ler 10 iphone cocoa-touch uitextfield uikit ios

即使使用标准字体大小,我也遇到了UITextField文本被模糊/消除锯齿的问题.当控件是第一响应者时,文本将显得清晰,但在失去焦点时再次模糊:

alt text http://www.mikeweller.com/images/blog/UITextFieldBlur.png

有人知道如何解决这个问题吗?

Dan*_*son 26

使用CGRectIntegral确保文本字段的框架基于整数坐标.当事物位于分数坐标上时,你会得到模糊的抗锯齿.


Mik*_*ler 12

好的,我在这里回答我自己的问题.

我通过Google找到了一些关于这个bug的引用,但是每个人都通过玩字体来解决这个问题.经过多次搜索后,我发现这个线程表示当视图的帧包含小数像素值时会应用抗锯齿,例如,如果您将其大小计算为超级视图的一小部分.

果然,将CGRect值转换为视图框架的(int)非常有效.举个例子,如果你希望你的文本字段在superview中垂直居中,你应该使用这样的(int)强制转换:

textFieldWidth = 300;
textFieldHeight = 31;
offsetX = 0;
offsetY = (superview.bounds.size.height - textFieldHeight) / 2;

textField.frame = CGRectMake((int) offsetX,
                             (int) offsetY,
                             (int) textFieldWidth,
                             (int) textFieldHeight);

还有CGRectIntegral函数可用于将CGRect转换为整数值.

  • 我建议你*不要*转换为int来舍入浮点值.有一个功能.这是'圆'.由于`CGRectMake`采用浮点参数,因此转换为int将隐式转换为浮动.这个双重演员模糊了它的意图,可能会表现得更糟.然后,CGRectIntegral甚至更好. (7认同)