2016-12-16 3 views
0

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

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

Я пробовал много вещей в методе UIControlEvents.editingChanged как setNeedsLayout, setNeedsDisplay, layoutSubViews(), setNeedsUpdateConstraints(), но не повезло.

Другим подходом было использование sizeToFit(), а затем установить ограничение frame.size.width на ограничение ширины текстового поля. Это действительно работало, но только в первый раз, когда вы редактируете. Когда вы редактируете второй раз, sizeToFit() всегда возвращает те же как-то.

Любые идеи?

Обновление: В результате я использовал другой подход. Я сделал текстовое поле полной шириной и поместил метку на верхнюю часть. Когда вы печатаете, он вычисляет ширину текста, а метка метра перемещается вправо соответственно, изменяя постоянную константы слева. Таким образом, метка всегда находится рядом с введенным номером.

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

+0

Пожалуйста, проверьте http://stackoverflow.com/questions/18236661/resize-a-uitextfield-while-typing-by-using-autolayout Я думаю, что это тот же вопрос. –

ответ

0

Я думаю, вы должны выполнить внутри

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool

Эта функция просто решить, следует ли вновь набранный символ будет добавляться в конце contentView текстовое поле в. Эта функция вызывается каждый раз, когда пользователь набирает.

Я думаю, UIControlEvents.editingChanged уведомляет вас, когда textField получает фокус или потерял фокус, но не когда значение изменилось.

+0

@Janneman. Надеюсь, это поможет вам. У меня такая же проблема при написании проекта. Я решил это программно. –