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

(来源:mikeweller.com)
有人知道如何解决这个问题吗?
即使使用标准字体大小,我也遇到了 UITextField 的文本被模糊/抗锯齿的问题。当控件是第一响应者时,文本会显得清晰,但在失去焦点时会再次模糊:

(来源:mikeweller.com)
有人知道如何解决这个问题吗?
使用CGRectIntegral确保文本字段的框架基于整数坐标。当事物位于分数坐标上时,您将获得模糊的抗锯齿。
好的,我在这里回答我自己的问题。
我通过 Google 找到了很多关于这个 bug 的参考资料,但每个人都通过调整字体大小来解决这个问题。经过多次搜索,我发现这个线程说当视图的帧包含分数像素值时应用抗锯齿,例如,如果您将其大小计算为超级视图的一部分。
果然,将视图框架的 CGRect 值转换为 (int) 效果很好。例如,如果您希望您的文本字段在超级视图中垂直居中,您应该使用这样的 (int) 强制转换:
文本字段宽度 = 300;
文本字段高度 = 31;
偏移X = 0;
offsetY = (superview.bounds.size.height - textFieldHeight) / 2;
textField.frame = CGRectMake((int) offsetX,
(int) 偏移量,
(int) 文本字段宽度,
(int) textFieldHeight);
还有 CGRectIntegral 函数可用于将 CGRect 转换为整数值。
除了使用非分数定位之外,还应确保对 UITextField 使用非居中的垂直对齐方式。看起来居中的垂直对齐加上奇怪的字体大小也会导致文本模糊。
我很乐意做出贡献,因为我在经历了相当多的挫折之后才自己发现了答案。
UITextFieldin的InterfaceBuilder强制帧高度为 31 像素。这不能点击拖动来调整大小,也不能在 IB 的框架属性中设置。您需要viewDidLoad将帧高度调整为 32 像素,这应该可以解决问题。
希望 IB 的未来版本能够纠正这一点。
我尝试使用 CGRectIntegral 之类的。在我的情况下,在 IB 中更改最小字体大小和字体大小就可以了。
我以前遇到过这个问题。下面的解决方案适用于任何文本或帧大小,因为它使用 round 函数来消除小数像素值。在有问题的 uitextfield 实例化之后插入以下代码。
CGRect temp = textField.frame;
temp.origin.x = round(temp.origin.x);
temp.origin.y = round(temp.origin.y);
textField.frame = temp;
只需将UITextField框架高度设置为一个偶数值即可为我修复它。
该站点的解决方案解释说,它可能与调整大小有关,iOS 不处理层的这个错误,只处理各种视图。我将其更新为 Swift 4:
view.contentScaleFactor = UIScreen.main.scale