0
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 の左側にあるはずですが、カーソルはそれ以上移動しません。

ここに画像の説明を入力

どうすればこれを修正できますか?

編集

このコードは、UI をリフレームするためのものです (向き変更メソッド内で layoutViewForCurrentorientation() を呼び出します)。

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

行を削除するとtextField.font = [UIFont fontWithName:@"Helvetica-neue" size:24.0];.I 問題は解決しますが、テキストフィールドに大きなフォントが必要です。

4

4 に答える 4

3

私はフォントを使用して[UIFont fontWithName:@"Helvetica-neue" size:24.0]いて、テキストフィールドのサイズは 25 でした。UITextfield高さを 30 にすると、問題は解決しました。実際の理由はわかりませんが、うまくいきました。

于 2014-08-11T13:07:28.363 に答える
1

9.3 でも同じ問題が発生しています。iOS のバグのようです。

UITextField がファーストレスポンダーの場合、UITextField には、入力ビュー (_UIFieldEditorContentView、-[UITextField inputView]) を含むスクロールビュー (UIFieldEditor) が含まれます。バグは、入力ビューのサイズが正しくないことです。入力ビューの幅が十分でないため、スクロールビューの -contentSize も正しくありません。UITextField は可能な限り右にスクロールしていますが、入力ビューが小さすぎるため十分ではありません。

私の回避策は、テキスト フィールドのテキストをリセットすることです。デリゲート コールバックを無視するためのフラグも必要になるでしょう。

_ignoreTextDelegate = TRUE;

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

_ignoreTextDelegate = FALSE;
于 2016-09-12T20:54:46.850 に答える
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 フレームの y 値に対して設定する必要があります

-(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;
}
于 2014-08-08T12:32:31.877 に答える