2015-09-04 4 views
7

У меня есть подкласс UITextField, где я переопределил некоторые методы (см. Код ниже). Проблема в том, что когда я ввожу его в текст, и текст достигает предела, он больше не будет показывать то, что я набираю. В режиме отладки я вижу, что UIFieldEditor намного шире, чем текст.UITextField текст не прокручивается с левой стороны

Вот UITextFiled код подкласса:

- (instancetype)init 
{ 
    self = [super init]; 
    if (self) { 
     self.edgeInsets = UIEdgeInsetsMake(7, 0, 10, 15); 
    } 
    return self; 
} 

- (id)initWithFrame:(CGRect)frame{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     self.edgeInsets = UIEdgeInsetsMake(7, 0, 10, 15); 
    } 
    return self; 
} 

-(id)initWithCoder:(NSCoder *)aDecoder{ 
    self = [super initWithCoder:aDecoder]; 
    if(self){ 
     self.edgeInsets = UIEdgeInsetsMake(7, 0, 10, 15); 
    } 
    return self; 
} 

- (CGRect)textRectForBounds:(CGRect)bounds { 
    return [super textRectForBounds:UIEdgeInsetsInsetRect(bounds, self.edgeInsets)]; 
} 

- (CGRect)editingRectForBounds:(CGRect)bounds { 
    return [super editingRectForBounds:UIEdgeInsetsInsetRect(bounds, self.edgeInsets)]; 
} 

Вот код, где я использую этот класс:

// alloc/init 
     _myTextField.delegate = self; 
     _myTextField.backgroundColor = [UIColor whiteColor]; 
     _myTextField.layer.masksToBounds = YES; 
     _myTextField.layer.cornerRadius = 3.0; 
     _myTextField.returnKeyType = UIReturnKeyDone; 
     _myTextField.clearButtonMode = UITextFieldViewModeWhileEditing; 
     _myTextField.autocapitalizationType = UITextAutocapitalizationTypeWords; 
     _myTextField.autocorrectionType = UITextAutocorrectionTypeNo; 
     _myTextField.hidden = YES; 

     _tfButton = [UIButton buttonWithType:UIButtonTypeSystem]; 
     [_tfButton setImage:[UIImage imageNamed:@"ic_edit"] forState:UIControlStateNormal]; 
     [self fs_addSubview:_tfButton]; 
     [_tfButton constrainWidth:22.]; 
     [_tfButton setTintColor:[UIColor greenColor]]; 
     [_tfButton constrainHeight:22.]; 
     [_tfButton constrainToRightOfView:_myTextField margin:-25.0]; 
     [_tfButton constrainEqualCenterYWithView:_myTextField offset:0.0]; 
     [_tfButton setUserInteractionEnabled:NO]; 


     UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 5)]; 

     _myTextField.leftView = leftView; 
     _myTextField.leftViewMode = UITextFieldViewModeAlways; 

Как получить текст, чтобы прокручиваться на левой стороне, когда пользователь вводит большую строку в этом текстовом поле?

ответ

2

Я столкнулся с той же проблемой, но у меня не было подкласса UITextField. Проблема заключается в том, что текстовое поле имеет определенное соотношение между высотой текста и размером шрифта. Увеличение размера шрифта выше определенного значения w.r.t высоту текстового поля вызвало эту проблему. Я немного уменьшил размер шрифта, и текстовое поле снова заработало.

+0

Не работает ... – user426132

-1

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

enter image description here

6

Ваш код совершенно прав. Проблема исходила из класса UITextField. Когда вы упали в UITextField в своем раскадровке и задали значение fontSize и minFontSize равным 50. Этот системный textField будет иметь ту же проблему, что и ваш пользовательский textField.

Это просто потому, что UITextField не умеет рисовать большой шрифт в узком пространстве.

Я использовал ваш подкласс textField (с высотой по умолчанию 30), после того как я изменил размер шрифта на 7, все работает нормально.

+0

я никогда не имел бы хоть попытаться изменить мое вручную установить размер шрифта, чтобы это исправить , Ты гений. Спасибо! – jp36

2

У меня есть другое решение. Похоже, что это сработает, если вы отметите опцию «Отрегулировать по размеру» ниже минимального размера шрифта (на раскадровке). Как-то текст будет сокращаться, если набрать больше, чем правое поле.

Или с кодом:

self.textField.minimumFontSize = 12; 
self.textField.adjustsFontSizeToFitWidth = YES; 
0

Уменьшение размера шрифта от 18 до 16 установил ее для меня. Не знаю, почему и пофиг: D

searchTF = [UITextField new]; 
searchTF.frame = CGRectMake(10, 10, w-140, 20); 
searchTF.backgroundColor = [UIColor redColor]; 
searchTF.font = [UIFont fontWithName:@"HelveticaNeue" size:18.0f]; 

в

searchTF.font = [UIFont fontWithName:@"HelveticaNeue" size:16.0f]; 
Смежные вопросы