Итак, я создаю приложение для обмена сообщениями, и у меня есть 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 строк, как бы я это сделал?