TextView в ScrollView - отключить автоматическую прокрутку при наборе? - PullRequest
0 голосов
/ 12 июня 2018

Возможно, корень проблемы во мне, но я не могу найти вариант отключения автопрокрутки на scrollview, в котором есть textView.

Всякий раз, когда пользователь вводит новую строкув нижней части видимой области просмотра прокрутки и продолжает набирать, просмотр прокрутки перемещается вдоль

———-

Это не просто проблема, проблема в том, что я не могу установить «маржа »для предотвращения переполненного вида элементов пользовательского интерфейса

Изображения:

(1) как это выглядит, теперь ввод новой строки внизуи набрав / scrollView автоматически прокручивает к этому положению /

(2) как это должно выглядеть

enter image description here

Что я мог сделать?

Ответы [ 3 ]

0 голосов
/ 14 августа 2018

Я делаю нечто похожее с UITextView, который имеет указанную начальную высоту и продолжает увеличивать высоту с вводимым текстом до максимальной указанной высоты, а затем начинает прокручивать текст.Дайте мне знать, это то, что вы ищете.

enter image description here Одна строка enter image description here Две строки enter image description here Три строкиenter image description here Четыре строки enter image description here Прекращение увеличения высоты

Я использую метод делегата, как показано ниже.Ограничения высоты в приведенном ниже коде - это IBOutlets из раскадровки.

func textViewDidChange(_ textView: UITextView) {
    let maxSize = CGSize(width: textView.frame.width, height: 90.0)
    let estimatedSize = textView.sizeThatFits(maxSize)
    if estimatedSize.height <= 90 {
        textView.isScrollEnabled = false
        textViewHeightConstraint.constant = estimatedSize.height
        textViewContainerHeightConstraint.constant = estimatedSize.height + 12.0
    } else {
        textView.isScrollEnabled = false
        textViewHeightConstraint.constant = 90.0
        textViewContainerHeightConstraint.constant = 102.0
    }
}
0 голосов
/ 31 августа 2018

У меня была похожая проблема.Просто поместите контейнер вокруг него (UIView) и поместите UITextView в этот контейнер.Вы можете получить к нему доступ через mytextView.superview ...


Вот пример того, как вы создаете TextView с его контейнером ...

// SuperView of textView
let container = UIView() 
self.scrollView.addSubview(container)

let textView = UITextView()
/*
your textView config
*/
container.addSubview(textView)

И просто устанавливаете ссылкувнутри метода делегата телевизора (не забудьте очистить его, если закончите редактирование)

// Delegate of UITextView... 
func textViewDidBeginEditing(_ textView: UITextView) {
    activeTextView = textView
    currentIdentifier = textView.accessibilityIdentifier
}

Это фрагмент внутри наблюдателя (KeyboardDidShow / Hide)

// activeTextView was defined inside textView
if activeTextView != nil { 
    // now you can access it via textview.superview?
    if let origin = activeTextView.superview?.frame.origin, let parentFrame = activeTextView.superview?.frame {
        if !aRect.contains(origin) {
            scrollView.scrollRectToVisible(parentFrame, animated:true)
        }
    }
}
0 голосов
/ 09 августа 2018

Единственным рабочим методом было добавить представление в конец textView .. не очень понимаю, почему

...