2016-09-18 4 views
4

Окружающая среда, которую я использую, это Xcode8 и iOS10.UITextField Китайский символ перемещается вниз при редактировании в iOS 10

Что я сделал:
В IB, перетащите UITextField в мой главный взгляд, добавить некоторые ограничения, чтобы поместить текстовое поле в нужном месте, выберите стиль границы текстового поля, чтобы никто, наконец, введите текст чтобы сделать UITextField размер в раскадровке, как показано ниже: TextField in storyboard

для того, чтобы увидеть, что происходит, я также сделать текстовое поле, чтобы сделать его границу, добавив это в viewDidLoad: self.textField.layer.borderWidth = 1;

Построить и запустить, она хорошо выглядит на устройстве:

enter image description here

Проблема

Однако, если я пытаюсь изменить текстовое поле (когда текстовое поле становится первым ответчиком), текст движется вниз :

enter image description here

Эта проблема возникает только при установке стиля границы текстового поля, чтобы никто и текст содержит китайскую ч атракторы, кто-нибудь знает, что здесь происходит?

+0

Больше всего текстового поля недостаточно для текста. – gnasher729

+0

@ gnasher729, это не должно быть так, так как я настраиваю размер шрифта в раскадровке и позволяю текстовому полю изменять его размер, а когда он не редактируется или стиль границы не является ничем, все работает нормально. – Gocy015

+0

Такая же проблема здесь. Теперь мы просто используем стиль рамки .Line и устанавливаем цвет границы для нашего цвета фона в качестве обходного пути. Но это не идеально, поскольку то же самое произойдет, если текстовое содержимое превышает ширину текстового поля. :( – onevcat

ответ

3

Тот же вопрос для меня. Я использую UIAlertView содержат UITextField, я могу это исправить, установив:

textField.clearButtonMode = UITextFieldViewModeWhileEditing; 

Это нормально.

Другой метод: подкласс UITextField, перепишут:

- (CGRect)textRectForBounds:(CGRect)bounds { 

    return CGRectInset(bounds, 2, 1); 

} 


- (CGRect)editingRectForBounds:(CGRect)bounds { 
    return CGRectInset(bounds, 2, 1); 

} 
+0

:) Да, это работает! – Gocy015

1

Такая же проблема с китайским символом при использовании UITextField. Текстовый дисплей в правом прямоугольнике, если текст короток и не прокручивается в UITextField. Когда UITextField не может отображать текст в видимом прямоугольнике и становится прокручиваемым, текст будет рисоваться ниже центральной линии, если нажать кнопку «Удалить» на клавиатуре.

После NSLOG подвидов из UITextField в layoutSubviews FUNC, он показывает подтаблицы имени UITextEditor имеет неправильную contentOffset.

Поэтому я переопределяю layoutSuviews func, сбрасываю contentOffset.y из UITextEditor после звонка [super layoutSubview].

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 
    for (UIScrollView *view in self.subviews) { 
     if ([view isKindOfClass:[UIScrollView class]]) { 
      CGPoint offset = view.contentOffset; 
      if (offset.y != 0) { 
       offset.y = 0; 
       view.contentOffset = offset; 
      } 
      break; 
     } 
    } 
} 
5

исправить эту проблему, установив BorderStyle к чему-либо, но UITextBorderStyleNone в интерфейсе строителя, а затем в моей ВК viewDidLoad, изменить его UITextBorderStyleNone, я полагаю, что это просто еще одна из многих ошибок, что интерфейс строитель имеет? :)

+0

Спасибо! Это работает для меня. – penlight

+2

СПАСИБО! Это здорово. Я попробовал, и это можно сделать только в коде (не нужно ничего менять в интерфейсе Builder: 'self.textField.borderStyle = UITextBorderStyleLine; self .textField.borderStyle = UITextBorderStyleNone; ' Кроме того, если вы используете пользовательский подкласс UIView (UITableViewCell или такой), поместите код в' -awakeFromNib'. –

0

Изменения UITextField высоты правильной высоты

1, получить размер шрифта

CGSize size = [@"你好" sizeWithFont:[UIFont systemFontOfSize:14]]; 

2, установите textFiled высоту и шрифт размер

CGRect frame = CGRectMake(100, 200, 150, size.height); 

UITextField textFiled = [[UITextField alloc] initWithFrame:frame]; 

[textFiled setFont:[UIFont systemFontOfSize:14]]; 

Надежда может вам помочь

0

Мы используем раскадровку, однако мы сталкиваемся с той же проблемой. После некоторого расследования мы решили использовать IBInspectable для взлома. Каждый UITextField в раскадровке поднимет флаг IBInspectable, и проблема будет решена. Это быстрый вариант:

extension UITextField { 

    @IBInspectable var hideBorder: Bool { 
    get { 
     return borderStyle == UITextBorderStyle.none 
    } 
    set { 
     if newValue { 
     borderStyle = UITextBorderStyle.line 
     borderStyle = UITextBorderStyle.none 
     } 
    } 
    } 

} 
Смежные вопросы