在UITextField中无法正确显示文本

时间:2014-08-08 12:16:23

标签: ios uitextfield uitextborderstyle

UITextField *theLastNameTF = [[UITextField alloc]init];
theLastNameTF.borderStyle = UITextBorderStyleNone;
theLastNameTF.font = [UIFont fontWithName:@"Helvetica-neue"  size:24.0];
theLastNameTF.textColor = [UIColor grayColor];
theLastNameTF.textAlignment = NSTextAlignmentLeft;
[theScrollView addSubview:theLastNameTF];

我正在使用上面的代码创建一个文本字段。我需要在文本字段下面显示一行,所以我在文本字段中添加了一个灰色的UILabel。

-(void)addLineToTextField:(UITextField *)theTextfield
{
    UILabel *theSeparatorLine = [[UILabel alloc]initWithFrame:CGRectMake(0, theTextfield.frame.size.height-0.5, theTextfield.frame.size.width, 0.5)];
    theSeparatorLine.frame = CGRectIntegral(theSeparatorLine.frame);
    theSeparatorLine.autoresizingMask = UIViewAutoresizingFlexibleWidth;
    theSeparatorLine.backgroundColor = kCS_LightGrayColor;
    [theTextfield addSubview:theSeparatorLine];

    theSeparatorLine = nil;
}

我在文本字段中遇到问题,在输入文本时,文本半可见,光标不向文本左侧移动。

请参考图片,我已输入" arun ... arun 123",正如预期的那样,光标应位于123的左侧,但光标不会进一步移动。

enter image description here

我该如何解决这个问题?

修改

此代码用于重新构建UI (在orientation方法更改方法中调用layoutViewForCurrentorientation())

-(void)layoutViewForCurrentorientation
{
    if ([[UIApplication sharedApplication]statusBarOrientation] == UIInterfaceOrientationPortrait) {
        [self potraitUI];
    }
    else
    {
        [self landscapeUI];
    }
}

如果我删除了行textField.font = [UIFont fontWithName:@"Helvetica-neue" size:24.0];。我的问题已解决,但我需要在textfield中使用更大的字体。

4 个答案:

答案 0 :(得分:3)

我使用的是字体[UIFont fontWithName:@"Helvetica-neue" size:24.0],文字字段大小为25.我的UITextfield高度为30,问题得到了解决。不知道实际原因但是有效。

答案 1 :(得分:1)

请设置文本框架

UITextField *theLastNameTF = [[UITextField alloc]initWithFrame:CGRectMake(50,50,250,30)];

我希望它可以帮到你。

答案 2 :(得分:1)

我在9.3中看到同样的问题。似乎是一个iOS错误。

当UITextField是第一个响应者时,UITextField包含一个包含输入视图的scrollview(UIFieldEditor)(_UIFieldEditorContentView, - [UITextField inputView]。)错误是输入视图的大小不正确。输入视图不够宽,因此scrollview的-contentSize也不正确。 UITextField尽可能向右滚动,但这还不够,因为输入视图太小了。

我的解决方法是重置文本字段的文本。您还可能需要一个标志来忽略委托回调:

_ignoreTextDelegate = TRUE;

NSString *text = textField.text;
textField.text = nil;
textField.text = text;

_ignoreTextDelegate = FALSE;

答案 3 :(得分:0)

试试这个

UITextField *theLastNameTF = [[UITextField alloc]initWithFrame:CGRectMake(20,50,250,30)];
theLastNameTF.borderStyle = UITextBorderStyleNone;
theLastNameTF.font = [UIFont fontWithName:kHelveticaneue size:15.0];
theLastNameTF.textColor = [UIColor grayColor];
theLastNameTF.textAlignment = NSTextAlignmentLeft;
[theScrollView addSubview:theLastNameTF];

并设置线框的y值应该与textField frame的值相关

-(void)addLineToTextField:(UITextField *)theTextfield
{
    UILabel *theSeparatorLine = [[UILabel alloc]initWithFrame:CGRectMake(0, theTextfield.frame.origin.y + 0.5, theTextfield.frame.size.width, 0.5)];
    theSeparatorLine.frame = CGRectIntegral(theSeparatorLine.frame);
    theSeparatorLine.autoresizingMask = UIViewAutoresizingFlexibleWidth;
    theSeparatorLine.backgroundColor = kCS_LightGrayColor;
    [theTextfield addSubview:theSeparatorLine];

    theSeparatorLine = nil;
}