2015-09-17 2 views
4

Я пытаюсь за последние два дня реализовать UITextView, который растет по мере ввода пользователем. Как и Whats-приложение.Расширение ввода текста - быстрые примеры

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

Также найдены некоторые другие рамки.

https://github.com/slackhq/SlackTextViewController - выглядит действительно здорово и может делать все, что мне нужно, но я не нашел примеров его быстрого запуска. Пример проекта, который я не мог запустить.

https://github.com/MatejBalantic/MBAutoGrowingTextView - не мог заставить его работать вверх.

Я ищу некоторую помощь в том, как реализовать это с помощью SWIFT или, возможно, образец проекта SLACK, работающего на быстром, что не является образцом проекта на github. Или, может быть, немного кода, показывающего, как связать UITextView с классом Slack и заставить его работать внутри класса viewController.

+0

Вы используете автоматическую компоновку? Есть ли максимальная высота для UITextView? Каково ожидаемое поведение после достижения максимальной высоты? –

+0

так технически, что вы хотите, так как человек пишет, что вы хотите, чтобы textfview стал больше, а контейнерный вид стал лучше основываться на текстовом контенте? – Lamar

+0

** Lamour **, именно это. Мне было особенно сложно сделать так, чтобы они выросли вверх и двигались вверх и вниз по мере активации клавиатуры или нет. ** Joe **, да я использую авто-макет. Как только максимальная высота будет достигнута, я хотел бы остановить UITextView от роста, а затем привести свиток. – GuiSoySauce

ответ

-4

Все, что вам нужно сделать для увеличения UITextView, это установить numberOfLines равным 0. Тогда он будет расти бесконечно. Надеюсь, это сработает для вас!

1

Вот что я сейчас использую для ввода inputAccessoryView.

У меня есть панель инструментов, которая держит UITextView и кнопку отправки и прослушивает textViewDidChange события так:

func textViewDidChange(_ textView: UITextView) { 
    let oldHeight = textView.height 
    let maxHeight: CGFloat = 100.0 //beyond this value the textView will scroll 
    var newHeight = min(textView.sizeThatFits(CGSize(width: textView.frame.width, height: CGFloat.greatestFiniteMagnitude)).height, maxHeight) 
    newHeight = ceil(newHeight) 
    if newHeight != oldHeight { 
     textView.frame.size.height = max(newHeight, barHeight) 
     updateHeight(height: newHeight) 
    } 
} 

Цель здесь, чтобы установить новую высоту TextView. Затем я также обновляю высоту панели инструментов

public func updateToolBarHeight(height: CGFloat) { 
    for constraint in constraints { 
     if constraint.firstAttribute == NSLayoutAttribute.height && constraint.firstItem as! NSObject == self { 
      constraint.constant = max(barHeight, height) 
     } 
    } 
    setNeedsUpdateConstraints() 
    sendButton.origin.y = max(0, height - barHeight) 
} 

barHeight - это моя панель инструментов по умолчанию (установлена ​​на 50.0). , и я также обновляю позицию sendButton, чтобы оставаться в нижней части панели инструментов.

0

Если вы используете UITextView, вы можете просто сделать его пригодным для его содержания, установив:

textView.isScrollEnabled = false 

Это позволит сделать его расти с входом.

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