编辑后UITextField中的文本向上移动(编辑时居中)

Dom*_*adl 45 iphone xcode objective-c uitextfield ios

我有一个奇怪的问题.我有一个UITextField,用户应在其中写入一些内容,因此该字段称为"amountField".一切都很好看,当用户开始编辑文本字段时,文本位于垂直和水平中心 - 这很棒.

但是,当用户结束编辑时,文本向上移动一点点.我尝试了很多东西,没有任何帮助......

我在下面添加了截图,因此您可以看到问题所在.

这是编辑字段时的样子 - 没关系.

这是在编辑字段时 - 没关系.

这就是完成编辑时的样子 - 这就是问题所在!

这就是问题.

如果有人知道可能导致这种情况的话,我将非常感激!:)

这是我的一些与amountField相关的代码.

amountField.keyboardType = UIKeyboardTypeNumberPad;
amountField.returnKeyType = UIReturnKeyDone;
amountField.delegate = self;

[amountField setFont:[UIFont fontWithName:@"Nuptial Script LT Std" size:30]];   
amountField.borderStyle = UITextBorderStyleNone;
UIImage *amountBg = [UIImage imageNamed:@"skin2_ipad_amountField.png"];
[amountField setBackground:amountBg];

amountField.rightView = nil;
//amountField.backgroundColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:0.2];

amountField.textAlignment = UITextAlignmentCenter;
amountField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
amountField.adjustsFontSizeToFitWidth = YES;
amountLabel.textColor = UIColorFromARGB(0x313030); //Using my own macro

amountField.frame = CGRectMake(300, 480, 136, 32);
amountField.center = CGPointMake(605, 439);
Run Code Online (Sandbox Code Playgroud)

PS:那些白色的角落是因为我将背景设置为0.2 alpha的白色,没关系.

n8t*_*8tr 51

我有一个类似的问题,开始在iOS 9上发生.基本上我在集合视图单元格中有一个UITextField.有时,当用户完成输入和编辑结束时,文本"反弹"然后再次向下进入其正确位置.非常奇怪和烦人的故障.只需进行此调整即可解决iOS 9上的问题,并证明在iOS 7和8上是安全的:

 - (void)textFieldDidEndEditing:(UITextField *)textField
 {
    [textField layoutIfNeeded]; //Fixes iOS 9 text bounce glitch
    //...other stuff
}
Run Code Online (Sandbox Code Playgroud)

  • 关于10.1.1的相同错误,来自Apple.顺便说一句,这个修复似乎仍然很好 (3认同)

Dom*_*adl 23

所以...

经过几个小时尝试很多事情 - 我发现了问题.在我的情况下,问题是字体.我真的不知道为什么,但字体的作者使字体怪异(领先等),它底部有一个空白区域.我不知道为什么,但是在编辑文本时,所有文本属性都会被忽略,但在完成编辑后,它们会被应用.

因此,如果您遇到类似的问题,请尝试将字体更改为Arial或类似的东西.

有关完整说明,请参阅以下链接:链接1链接2.这些链接中推荐的解决方案可以避免您的麻烦,甚至可以应用于修复问题,如开始编辑UITextField(使用系统字体或其他特定字体)时移动到顶部的文本.

  • 试试这个,而不是改变字体.http://stackoverflow.com/a/10087220/244183 (6认同)

Ale*_*ria 8

禁用TextField的ClipsToBounds为我解决了它.

  • 我的猜测是,由于光标比文本高,当你使文本字段第一响应者和启用剪辑到边界时,必须重新绘制文本以正确适合文本和光标.我们看到的是重绘.禁用剪辑以限制时,不再约束文本字段的垂直位置,因此不会进行重绘或更新.@hoseokchoi (2认同)