即使使用标准字体大小,我也遇到了 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 使用非居中的垂直对齐方式。看起来居中的垂直对齐加上奇怪的字体大小也会导致文本模糊。
我很乐意做出贡献,因为我在经历了相当多的挫折之后才自己发现了答案。
UITextField
in的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