iPad UITextField - курсор не центрируется при изменении размера фрейма с помощью contentVerticalAlignment = UIControlContentVerticalAlignmentCenter - PullRequest
2 голосов
/ 26 октября 2010

Я работаю над универсальным приложением для iPhone / iPad. Я изменяю размеры некоторых из моих UITextFields как пользовательские типы. У меня также есть некоторый код для перемещения UITextFields, чтобы их расположение имело смысл при изменении их размера. Этот код не слишком короткий, но в основном он сводится к изменению фреймов полей UITextFields.

Мои UITextFields имеют свое содержимое по центру по вертикали, установив

textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;

Текст центрируется просто отлично. Но когда я изменяю размер текстового поля на iPad, курсор иногда переходит в верхнюю часть окна. Это выглядит странно для пользователя, так как текст находится в центре.

Это всегда происходит на iPad, а не на iPhone. Что еще хуже, я не могу выделить, какая именно часть кода вызывает это, за исключением того, что если я перестану изменять размер, проблема исчезнет.

Кто-нибудь еще сталкивался с этим? Удалось ли вам определить источник проблемы?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 03 октября 2013

Для лучшего контроля выравнивания текста в текстовом поле вы можете использовать подкласс UITextField, где вы переопределяете следующие методы:

- (CGRect)textRectForBounds:(CGRect)bounds
{
    CGRect rect = [super textRectForBounds:bounds];
    rect.origin.y = (bounds.size.height - rect.size.height) / 2;
    rect = CGRectInset(rect, 3.0f, 0.0f);
    return rect;
}

- (CGRect)editingRectForBounds:(CGRect)bounds
{
    CGRect rect = [super editingRectForBounds:bounds];
    rect.origin.y = (bounds.size.height - rect.size.height) / 2;
    rect = CGRectInset(rect, 3.0f, 0.0f);
    return rect;
}

- (CGRect)placeholderRectForBounds:(CGRect)bounds
{
    CGRect rect = [super placeholderRectForBounds:bounds];
    rect.origin.y = (bounds.size.height - rect.size.height) / 2;
    rect = CGRectInset(rect, 3.0f, 0.0f);
    return rect;
}
0 голосов
/ 26 октября 2010

Я понял, что вызывает ошибку.Это происходит, когда textField изменяется как с помощью layoutSubviews, так и с помощью метода, запускаемого UIControlEventEditingChanged.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...