Итак, я делаю приложение для обмена сообщениями, и у меня есть 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
}
}
Затем я добавляю наблюдателя для обработки события изменения contentSize UITextView:
messageTextView.addObserver(self, forKeyPath: "contentSize", options: .new, context: nil)
Я обрабатываю это правильно: каждый раз, когда contentSize изменяется на x строк, я увеличиваю высоту typingView
на высоту x строк, вызывая typingView.invalidateIntrinsicContentSize()
. Что-то вроде этого.
Вот мой код для пересчета размера:
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 строк, как мне это сделать?
newHeight
UITextView с таким количеством строк? - person Michael Hsu   schedule 12.05.2018