2013-08-31 2 views
14

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

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

enter image description here

enter image description here

+2

Можете ли вы показать больше кода? Какие свойства установлены для него? Как он добавляется в представление? – AdamG

+0

Я добавляю его к виду через файл nib, и я ничего не делаю с ним программно. У меня есть пользовательский шрифт, выравнивание по центру, отсутствие границы, отсутствие четкой кнопки, настройка на соответствие, а все остальное - только настройки по умолчанию. –

+0

Вы нашли решение на этом? – AdamG

ответ

0

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

+0

Я попробовал изменить размер UITextField и «Размер по размеру контента», без везения. –

2

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

что обладает этим свойством (UITextField Apple Documentation):

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

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

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

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

+0

Спасибо за ответ. Ни настройка свойства adjustsFontSizeToWidth в значение NO (снятие флажка), либо изменение минимального размера шрифта не устранили проблему. –

+0

Когда вы устанавливаете minimumfontsize, вы делаете его того же размера, что и ваш шрифт? – AdamG

+0

Я просто попробовал это безрезультатно. Я нашел это сообщение, которое помогает с горизонтальным позиционированием, но расстояние между текстами все равно меняется. http://stackoverflow.com/questions/6351340/using-a-custom-font-in-a-uitextfield-causes-it-to-shift-slightly-when-accessed –

0

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

+0

Это не влияет на проблему. –

1

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

+0

Это точно, что исправлено и должно быть отмечено как ответ. –

2

В XIb, BorderStyle набор TextField в любое значение, чем TextBorderStyleNone. И в коде задайте текстовое поле borderStyle как TextBorderStyleNone явно.

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

Когда задано значение borderStyle текстового поля как textBorderStyleNone в xib, проблема все еще сохраняется, даже если для параметра borderStyle задано значение TextBorderStyleNone в коде. За ним может последовать какой-то материал «layoutIfNeeded», вызванный изменением стоимости.

2

Проверка OFF «Клип к границам» textField в моей раскадровке отлично работает для меня.

+0

Это помогло мне. Как отмечено в комментарии к OT выше, я заметил, что это происходит с iOS 10.0 (но не с 9.3.x) при использовании невидимого стиля границы. Стиль рамки по умолчанию не имеет проблемы. – Jonny

1

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

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