Текст в UITextField перемещается вверх после редактирования (центр при редактировании) - PullRequest
45 голосов
/ 13 марта 2012

У меня странная проблема. У меня есть UITextField, в котором пользователь должен записать сумму чего-либо, поэтому поле называется «amountField». Все выглядит хорошо, когда пользователь начинает редактировать текстовое поле, текст находится в вертикальном и горизонтальном центре - это здорово.

Однако, когда пользователь заканчивает редактирование, текст немного увеличивается. Я много чего перепробовал, ничего не помогло ...

Я добавляю скриншоты ниже, чтобы вы могли увидеть, в чем проблема.

Вот так это выглядит при редактировании поля - все нормально.

This is while editing the field - that's ok.

И вот как это выглядит, когда закончите редактирование - это проблема !

This is the problem.

Пожалуйста, если кто-нибудь знает, что может вызвать это, я был бы очень благодарен! :)

Вот часть моего кода, связанного с amountField.

amountField.keyboardType = UIKeyboardTypeNumberPad;
amountField.returnKeyType = UIReturnKeyDone;
amountField.delegate = self;

[amountField setFont:[UIFont fontWithName:@"Nuptial Script LT Std" size:30]];   
amountField.borderStyle = UITextBorderStyleNone;
UIImage *amountBg = [UIImage imageNamed:@"skin2_ipad_amountField.png"];
[amountField setBackground:amountBg];

amountField.rightView = nil;
//amountField.backgroundColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:0.2];

amountField.textAlignment = UITextAlignmentCenter;
amountField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
amountField.adjustsFontSizeToFitWidth = YES;
amountLabel.textColor = UIColorFromARGB(0x313030); //Using my own macro

amountField.frame = CGRectMake(300, 480, 136, 32);
amountField.center = CGPointMake(605, 439);

PS: эти белые углы есть, потому что я установил белый фон с 0,2 альфа, это нормально.

Ответы [ 12 ]

0 голосов
/ 07 сентября 2013

Мне не удалось изменить файл шрифта, поэтому, когда я решил это, я сохранил исходный фрейм UITextField в свойстве и применил следующий код:

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    textField.frame = self.usernameFrame;
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
    textField.frame = CGRectOffset(self.usernameFrame, 0, 1);
}

Это немного странно, но этовыполняет свою работу.

0 голосов
/ 14 марта 2012

У меня были похожие проблемы с UITextfield, встроенным в UITableViewCell. Где именно этот код находится в вашем проекте? Я считаю, что происходит то, что после того, как вы закончили редактирование определенного текстового поля, оно отправляет себе -setNeedsDisplay, и впоследствии вызывается его drawRect:. Это может объяснить сдвиг в выравнивании. В моем конкретном сценарии мне пришлось использовать метод делегата табличного представления -willDisplayCell ..., чтобы установить выравнивание содержимого. Мне нужно знать больше о вашем дизайне, чтобы предложить предложение.

Одним из возможных решений было бы использование методов делегата текстового поля для установки выравнивания содержимого.

-(void)textFieldDidEndEditing:(UITextField *)textField{
     if (amountField == textField){
          amountField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
        }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...