Подтвердить что ты не робот

Текст UITextfield перемещается по редактированию

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

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

enter image description here

enter image description here

4b9b3361

Ответ 1

Выбор свойства "adjust to fit" устанавливает свойство adjustsFontSizeToWidth в UITextField.

У этого свойства есть (UITextField Apple Documentation):

Обычно содержимое текстовых полей рисуется шрифтом, указанным в свойстве шрифта. Если для этого свойства установлено значение "ДА", и содержимое в текстовом свойстве превышает ограничивающие текстовые поля прямоугольник, приемник начинает уменьшать размер шрифта до тех пор, пока строка подходит или минимальный размер шрифта. Текст сокращается вдоль базовый уровень.

Значение по умолчанию для этого свойства равно NO. Если вы измените его на YES, вы также должны установить соответствующий минимальный размер шрифта, изменив Свойство minimumFontSize.

Я попытался бы сначала снять этот флажок и посмотреть, не остановит ли это его, а затем последует за советом по документации и в противном случае установит свойство minimumFontSize ниже, что также может вызвать проблему.

Эта проблема может быть связана с появлением синего "теперь редактирующего" курсора. Исходный текст (ссылка) является нижней частью текста. Ваш текст сокращается "вдоль базовой линии", нажав вниз, который сильнее склоняется в направлении, являющемся проблемой minimumFontSize/adjustsFontSizeToWidth.

Ответ 2

В xib установите для textfield borderStyle значение, отличное от TextBorderStyleNone. И в коде задайте текстовое поле borderStyle как TextBorderStyleNone явно.

Я не мог понять, почему, но это похоже на ошибку инициализации. Он отлично работает в другом коде, который не инициализирует UITextField через выход из xib.

При установке текстового поля borderStyle как TextBorderStyleNone в xib проблема остается, даже если для параметра borderStyle задано значение TextBorderStyleNone в коде. За ним может последовать какой-то материал layoutIfNeeded, вызванный изменением значения.

Ответ 3

Проверка ВЫКЛ "Клип к границам" textField в моей раскадровке отлично подходит для меня.

Ответ 4

Если вы принудительно создаете первый ответчик UITextField, сделайте это в viewDidAppear: вместо viewDidLoad... Это решило проблему для меня...

Ответ 5

Вероятно, вы настроили UITextField слишком небольшим по высоте. Попробуйте вручную изменить его размер, чтобы он был на два пиксела. Или выберите его в редакторе XIB и используйте "Размер для размещения контента" в меню "Редактор". Это должно привести к тому, что текстовое поле будет иметь нужный размер, чтобы это изменение текста не произошло.

Ответ 6

Вы должны установить свойство шрифта раньше, чем свойство Text.

Ответ 7

Настройка свойства Min Font Size, равного размеру шрифта в Interface Builder, работала для меня