web-dev-qa-db-ja.com

プログラムで作成されたUITextFieldの中央に配置されていないプレースホルダーテキスト

プログラムでUITextFieldを作成し、UIView内に配置しています。フォントサイズは15.0f(システムフォント)に設定されています。ただし、表示されるプレースホルダーはテキストビューの中央にありません。誰もこれを解決する方法を知っていますか?

私はSOのぼやけたテキストなどについてのいくつかの参照を見つけ、整数値でテキストフィールドのフレームを設定しようとしましたが、違いはありません。

UITextField *txtField = [[UITextField alloc] initWithFrame:CGRectMake(5.0f, 6.0f, 278.0f, 32.0f)];
[txtField setPlaceholder:@"My placeholder"];
[txtField setFont:[UIFont systemFontOfSize:15.0]];
[txtField setBorderStyle:UITextBorderStyleRoundedRect];
[txtField setAutocorrectionType:UITextAutocorrectionTypeNo];
[txtField setAutocapitalizationType:UITextAutocapitalizationTypeNone];
[txtField setKeyboardType:UIKeyboardTypeEmailAddress];
[txtField setReturnKeyType:UIReturnKeyDone];
[txtField setClearButtonMode:UITextFieldViewModeWhileEditing];

助けてくれてありがとう

注:テキストはテキストフィールドの垂直方向の中央に配置されていません(少し上に向かっています)。したがって、テキストの配置を設定することは解決策ではありません。

明確化のために問題の画像を追加する-画像に見られるように、プレースホルダーテキストは垂直方向の中央ではなく上部に向かっています。 alt text

44
lostInTransit

以下を追加する必要があります。

txtField.textAlignment = NSTextAlignmentCenter; // Pre-iOS6 SDK: UITextAlignmentCenter

これにより、プレースホルダーテキストとユーザーが入力するテキストの両方の配置が調整されることに注意してください。

垂直方向の中央揃え方法

元の質問が更新され、プレースホルダーテキストを垂直方向に配置する方法がリクエストされ、その回答はコメントに埋もれているため、次のようにします。

txtField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
56
jer

これはiOS7では期待どおりに機能しません。 iOS7では、TextFieldクラスをオーバーライドする必要があり、

- (void) drawPlaceholderInRect:(CGRect)rect

方法。

このような:

- (void) drawPlaceholderInRect:(CGRect)rect
{
    [[UIColor blueColor] setFill];
    CGRect placeholderRect = CGRectMake(rect.Origin.x, (rect.size.height- self.font.pointSize)/2, rect.size.width, self.font.pointSize);
    [[self placeholder] drawInRect:placeholderRect withFont:self.font lineBreakMode:NSLineBreakByWordWrapping alignment:self.textAlignment];
}

IOS7と以前のバージョンの両方で動作します。

18
ancajic

色だけを使用していましたが、フォントも設定する必要があります。

これは私のために働いた:

[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setDefaultTextAttributes:
@{
     NSForegroundColorAttributeName:[UIColor whiteColor], 
     NSFontAttributeName: [UIFont systemFontOfSize:12]
}];
2
diegosantiviago

NSParagraphStyleを使用して最小行の高さを変更することが唯一の解決策でした:

    NSMutableParagraphStyle *style = [self.addressBar.defaultTextAttributes[NSParagraphStyleAttributeName] mutableCopy];
style.minimumLineHeight = self.addressBar.font.lineHeight - (self.addressBar.font.lineHeight - placeholderFont.lineHeight) / 2.0;

self.addressBar.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"Placeholder text" attributes:@{
     NSForegroundColorAttributeName: [UIColor colorWithRed:79/255.0f green:79/255.0f blue:79/255.0f alpha:0.5f],
     NSFontAttributeName : placeholderFont,
     NSParagraphStyleAttributeName : style
}];
0
mattsson