我有UITextField
使用Museo Sans Rounded 300字体。一切都适用于普通的UITextFields,但是当你设置secureTextEntry = YES
时,随着UITextField获得并失去焦点(即成为并放弃,成为第一个响应者),子弹的大小就会出现令人不安的变化。 / p>
当UITextField
具有焦点时,子弹似乎使用自定义字体,但一旦失去焦点,它们就会变为更大(标准尺寸)的子弹。
答案 0 :(得分:5)
所以,我找到解决这个问题的唯一方法是使用textFieldDidBeginEditing
和textFieldDidEndEditing
委托方法,跟踪文本字段中输入的内容,用子弹掩码替换它,并禁用secureTextEntry
。因此,当他们离开战场时,他们实际上只是看到正确数量的子弹,而不是他们的安全文本。它既黑又乱,但它也适合我,也许也适合你。
答案 1 :(得分:4)
我找到了一个简单的解决方案,它的效果非常好。 当您将secureTextEntry设置为yes时,基本上您必须将字体更改为自定义字体。
- (void)textFieldDidBeginEditing:(UITextField *)textField{
if([textField.text isEqual:@"Password"]){
textField.text = @"";
textField.font = [UIFont fontWithName:@"Helvetica" size:14.5];
textField.secureTextEntry = YES;
}
}
- (void)textFieldDidEndEditing:(UITextField *)textField{
if([textField.text isEqual:@""]){
textField.text = @"Password";
textField.secureTextEntry = NO;
textField.font = [UIFont fontWithName:@"YourFont" size:14.5];
}
}
答案 2 :(得分:2)
另一种解决方法:
虽然这是一个iOS错误(在iOS 7中是新的,我应该添加),但我确实有另一种方法来解决它可能会被接受的问题。功能仍然略有下降但不是很多。
基本上,只要字段中输入了某些内容,就可以将字体设置为默认字体系列/样式;但是当没有输入任何内容时,请将其设置为自定义字体。 (字体大小可以单独留下,因为它是系列/样式,而不是大小,有缺陷。)捕获字段值的每次更改并在此时相应地设置字体。然后,当没有输入任何内容时,微弱的“提示”文本具有您想要的字体(自定义);但是当输入任何内容时(无论您是否正在编辑)都将使用默认值(Helvetica)。由于子弹是子弹,这应该看起来不错。
一个缺点是,在被项目符号替换之前输入的字符将使用默认字体(Helvetica)。这只是每个角色的瞬间。如果这是可以接受的,那么这个解决方案就可以了。
答案 3 :(得分:2)
我只是测试上面的结果,@ Javier Peigneux的答案是最简洁的
#pragma mark -- UITextFieldDelegate
- (void)textFieldDidBeginEditing:(UCSSafeTF *)safeTF{
safeTF.font = [UIFont fontWithName:@"Helvetica" size:14];
}
- (void)textFieldDidEndEditing:(UCSSafeTF *)safeTF{
safeTF.font = [UIFont fontWithName:@"Helvetica" size:14];
}
现在我这样写,结果还可以。那你之所以看到子弹尺寸从小到大变化的原因很明显,只是因为苹果iOS 10以下"帮助"我们调整自定义字体的大小。希望对你有所帮助。
答案 4 :(得分:0)
只需创建一个每次选择显示/隐藏密码切换时都会调用的方法。在方法内部,将字体设置为nil,然后将字体设置为自定义字体和字体大小。您也应该在viewWillAppear方法中设置自定义字体和大小。在此方法中,您将重新设置它。
这样,您无需停用secureTextEntry
(这可能会使您的文字字段容易受到攻击),而您无需使用textFieldDidBeginEditing
或{{ 1}}。
代码示例:
textFieldDidEndEditing