在iOS7中更改安全UITextField中的UIFont奇怪行为

我创build一个简单的项目: https : //github.com/edzio27/textFieldExample.git

在那里添加两个UITextField ,一个用login名,另一个用安全密码。 我注意到有一些奇怪的行为:

  1. 点击login并添加一些文字,
  2. 点击密码并添加一些文字,
  3. 再次单击以loginUITextField

在这里输入图像说明

请注意,密码字体大小有一个奇怪的行为。 它只出现在iOS7中。

可能是什么问题?

谢谢。

正如一对夫妇指出的那样,看起来安全的文本字段并不总是与自定义字体搭配得很好。 我通过使用UITextField的UIControlEventEditingChanged监视文本字段的变化,并将其设置为系统字体(使用正常的望点),当input任何内容,否则使用我的自定义字体。

这让我继续使用我的自定义字体的文本框占位符,并仍然看起来不错,当input密码。 input时一次显示的字符将是系统字体,但我没有问题。

在viewDidLoad中:

 [self.passwordTextField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; 

现在添加一个textFieldDidChange方法:

 - (void)textFieldDidChange:(id)sender { UITextField *textField = (UITextField *)sender; if (textField == self.passwordTextField) { // Set to custom font if the textfield is cleared, else set it to system font // This is a workaround because secure text fields don't play well with custom fonts if (textField.text.length == 0) { textField.font = [UIFont fontWithName:@"OpenSans" size:textField.font.pointSize]; } else { textField.font = [UIFont systemFontOfSize:textField.font.pointSize]; } } } 

使用自定义字体切换安全/不安全状态:要显示“安全”文本(blob字符),包含blob字符的字体由iOS设置。 这是您稍后在切换到不安全模式时看到渲染文本的字体。

尽pipe文本字段保留了您指定的自定义字体,但该字段的内容是引用了包含blob的字体的属性string。

简单的解决scheme :写入属性string字段,并重新应用正确的自定义字体。

要closures安全条目并保留自定义字体:

 passwordTextField.secureTextEntry = false // We have to remove iOS' secure font by setting attributedText. let pwd = passwordTextField.text! passwordTextField.attributedText = NSAttributedString(string: pwd) 

如果您在密码字段中closures了“调整为适合”,那么当您退出响应者时,它将停止执行resize。

设置你的TextField的委托并添加这个;

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if (!textField.secureTextEntry) { return YES; } textField.text = [textField.text stringByReplacingCharactersInRange:range withString:string]; if (textField.text.length > 0) { textField.font = [UIFont systemFontOfSize:18.0f]; } else { textField.font = [UIFont fontWithName:@"YourFont" size:18.0f]; } return NO; } 

检查: UITextField secureTextEntry项目符号与自定义字体?

有一个我喜欢的glyuck优雅的解决scheme。 http://github.com/elegion/ELFixSecureTextFieldFont他在UITextField上创build了一个类别。 要有很好的显示点,你必须包含ELFixSecureTextFieldFont.h和.m文件,然后在你的textField上调用 – (void)fixSecureTextFieldFont,像这样:

 [yourCustomSecureTextField fixSecureTextFieldFont]; 

这就对了。