通过在Xcode中创建一个新项目(我使用的是6.4版)并使用以下代码可以证明这个问题:
@interface ViewController ()
@property (nonatomic, strong) UITextField * myTextField;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.myTextField = [[UITextField alloc] initWithFrame:CGRectMake(50, 50, self.view.frame.size.width-100, 50)];
self.myTextField.textAlignment = NSTextAlignmentRight;
[self.myTextField becomeFirstResponder];
self.myTextField.backgroundColor = [UIColor lightGrayColor]
self.myTextField.adjustsFontSizeToFitWidth = YES;
self.myTextField.font = [UIFont systemFontOfSize:40];
[self.view addSubview:self.myTextField];
}
- (void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
self.myTextField.text = @"1.5241578750119E18";
}
在iOS模拟器(iPhone 5或5S)中运行此项目时,光标最初显示在最后一个" 1"和" 8"之后。在输入新字符之前不可见。
这似乎是Apple的一个错误,但我的问题是:现在是否有一种解决方法会强制文本右对齐并将光标显示在正确的位置?
为了进一步澄清问题,以编程方式设置文本时会出现问题。我希望看到这个:
但相反,我看到了这一点(请注意,整个数字不可见,光标显示在" 1&#34之后;而不是最后一个数字,即" 8") :
答案 0 :(得分:1)
这是iOS中存在的一个错误,自iOS 7以来。问题也可以在像“设置”这样的库存应用程序中重现。它仅在使用NSTextAlignmentRight
时影响文本字段。针对此问题登录到Radar的原始错误ID为 14485694 。您可以使用中心或左侧文本对齐来规避此问题。
我还建议向Apple提交新的bug报告,
答案 1 :(得分:0)
试试这个
UIView *paddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 20)];
self.myTextField.leftView = paddingView;
self.myTextField.leftViewMode = UITextFieldViewModeAlways;
它会在TextField
的左侧添加一些空格,以便光标从正确的位置开始。
希望它有所帮助。
答案 2 :(得分:0)
如果我将您的代码更改为:
- (void)viewDidLoad {
[super viewDidLoad];
self.myTextField = [[UITextField alloc] initWithFrame:CGRectMake(5, 50, self.view.frame.size.width-10, 50)];
self.myTextField.textAlignment = NSTextAlignmentRight;
[self.myTextField becomeFirstResponder];
self.myTextField.backgroundColor = [UIColor lightGrayColor];
self.myTextField.adjustsFontSizeToFitWidth = YES;
self.myTextField.font = [UIFont systemFontOfSize:60];
[self.view addSubview:self.myTextField];
}
然后开始键入这些数字,光标沿着文本字段的右边缘结束,就像它应该的那样。
即使我在文本中使用默认值启动应用程序,我也会看到文本字段右边缘的光标正常。
答案 3 :(得分:0)
收听 class BaseClassMeta(type):
pass
class BaseClass(metaclass=BaseClassMeta):
...
def class_constructor(name: str, attrs: Dict[str, Any]) -> BaseClassMeta
ConstructedClass = BaseClassMeta(name, (BaseClass,), attrs)
return ConstructedClass
通知而不是UITextFieldTextDidChangeNotification
会解决问题。
答案 4 :(得分:0)
我遇到了同样的问题,请尝试添加这样的伪代码
(void)textFieldDidBeginEditing:(UITextField *)textField {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
textField.text = textField.text;
});
}