UITextfield在编辑时文本会移动

16
当我的UITextField成为第一响应者(在编辑时),文本会稍微向下移动,字符之间的间距也会略微增加。当放弃第一响应者(键盘消失)时,字符会回到原来的位置。起初我以为这是字体问题,因为我使用了自定义字体,但是当我使用系统字体或其他自定义字体时,同样会发生这种情况。
请查看下面的图片。第一个图片是键盘未弹起时的状态,第二个是键盘弹起的状态。可能很难看出,因为变化很小,但弹起键盘的状态显示字符稍微向下和分开移动。 enter image description here enter image description here

2
你能展示更多的代码吗?它有哪些属性被设置了?它是如何添加到视图中的? - AdamG
我通过nib文件将其添加到视图中,并没有通过编程做任何操作。我有一个自定义字体,居中对齐,无边框,无清除按钮,调整以适应和其他所有默认设置。 - jasper holgren
你找到解决方法了吗? - King-Wizard
我注意到自从iOS 10.0以来(但不是9.3.x),当使用无形边框样式时会出现这种情况。默认边框样式没有这个问题。这个答案帮助了我:https://dev59.com/02Ml5IYBdhLWcg3wRlLo#41823255 - Jonny
9个回答

4
在xib中,将textfield的borderStyle设置为任何值而不是TextBorderStyleNone。在代码中,明确将textfield的borderStyle设置为TextBorderStyleNone。
我无法解释为什么,但这似乎是初始化程序错误。在其他没有通过xib的outlet初始化UITextField的代码中,它运行得很好。
当在xib中将textfield的borderStyle设置为TextBorderStyleNone时,即使在代码中将borderStyle设置为TextBorderStyleNone,问题仍然存在。这可能是由某种“layoutIfNeeded”相关事项引起的,该事项由值更改触发。

3
如果你强制使UITextField成为第一响应者,请在viewDidAppear:中完成,而不是在viewDidLoad中完成... 这对我解决了问题...

这正是解决问题的方法,应该标记为答案。 - Sipke Schoorstra

3
选择“自适应大小”属性会设置UITextField中的adjustsFontSizeToWidth属性。该属性(UITextField Apple Documentation)如下:
通常,文本字段的内容使用您在font属性中指定的字体绘制。但是,如果将此属性设置为YES,并且文本属性中的内容超出了文本字段的边界矩形,则接收器开始减小字体大小,直到字符串适合或达到最小字体大小。文本沿基线缩小。
此属性的默认值为NO。如果更改为YES,则还应通过修改minimumFontSize属性来设置适当的最小字体大小。
我会首先尝试取消选中此选项,看看是否可以解决问题,然后按照文档建议将minimumFontSize属性设置得更低,否则可能也会导致问题。
这个问题可能是由于蓝色的“正在编辑”光标出现所导致的。文本(reference)的基线是文本的底部。您的文本通过向下推动而“沿着基线缩小”,这更加强烈地表明这是一个minimumFontSize/adjustsFontSizeToWidth问题。

感谢您的回复。将adjustsFontSizeToWidth属性设置为NO(取消勾选)或修改最小字体大小都无法解决问题。 - jasper holgren
当您设置minimumfontsize时,是否将其设置为与字体相同的大小? - AdamG
我尝试过这个方法,但无济于事。我找到了这篇帖子,它帮助进行水平定位,但文本间距仍然改变。https://dev59.com/6Gw15IYBdhLWcg3w3fjN - jasper holgren
从那篇帖子中,你是否尝试将编辑插入值更改为左侧(底部示例中的8,5中的8)? - AdamG
是的,改变第一个值只是缩小了UITextField的矩形。 - jasper holgren

2

在我的Storyboard中,将textField的“剪切边界”选项设置为关闭对我来说很有效。


这对我很有帮助。如OT上面的评论所述,我注意到在使用不可见边框样式时,自iOS 10.0以来(但不是9.3.x),会出现此问题。默认边框样式没有这个问题。 - Jonny

1
将“Min Font Size”属性设置为在“Interface Builder”中的字体大小对我有效。

1
你可能将UITextField的高度大小设置得稍微有点小。尝试手动调整大小,使其比原来高一个像素或两个像素。或在XIB编辑器中选择它,并在“编辑器”菜单中使用“适应内容大小”选项。那样就应该可以将文本字段设置为正确的大小,以避免文本移位问题的发生。

我尝试调整UITextField的大小并使用“自适应内容大小”的选项,但没有成功。 - jasper holgren

1
在故事板中控制垂直对齐方式就可以解决这个问题。

1
我的问题与UIStackView的错误对齐有关。
当您将UITextField放入UIStackView中时,请确保正确设置其alignment,否则自动布局无法确定如何正确定位您的视图。
在我的情况下,我必须将其设置为 .leading
stackView.alignment = .leading

0

在设置文本属性之前,您应该先设置字体属性。


这对问题没有任何影响。 - Adam Kaplan

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