начать прокрутку, когда UITextView достигает определенного числа строк?Свифт 4 - PullRequest
0 голосов
/ 11 мая 2018

Итак, я создаю приложение для обмена сообщениями, и у меня есть inputAccessoryView с именем typingView, который содержит messageTextView: UITextView и sendButton: UIButton.У меня есть отдельный класс, который называется class InputAccessoryView: UIView, UITextViewDelegate.Это мой код для установки inputAccessoryView:

var typingView: InputAccessoryView!

lazy var typingViewContainer: UIView = {
    typingView = InputAccessoryView(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: fakeTypingViewHeight.constant))
    return typingView
}()

override var inputAccessoryView: UIView? {
    get {
        return typingViewContainer
    }
}

override var canBecomeFirstResponder: Bool {
    get {
        return true
    }
}

Затем я добавляю наблюдателя, чтобы действовать в случае изменения содержимогоSize UITextView:

messageTextView.addObserver(self, forKeyPath: "contentSize", options: .new, context: nil)

Я обрабатываюэто правильно - каждый раз, когда contentSize изменяется на x строк, я увеличиваю высоту typingView на высоту x строк, вызывая typingView.invalidateIntrinsicContentSize().Что-то вроде this .

Вот мой код для пересчета размера:

override var intrinsicContentSize: CGSize {
    let sizeToFitIn = CGSize(width: messageTextView.bounds.size.width, height: .greatestFiniteMagnitude)
    let newSize = messageTextView.sizeThatFits(sizeToFitIn)
    let newHeight = newSize.height
    return CGSize(width: bounds.width, height: newHeight)
}

Также messageTextView.isScrollEnabled = false, из-за этот пост здесь .

Таким образом, он корректно пересчитывает высоту каждый раз, когда изменяется contentSize, но мой вопрос: Если я хочу, чтобы UITextView начал прокручивать, скажем, 5 строк, как бы я это сделал?

...