所以我正在创建一个消息传递应用,我有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
}
}
然后我添加一个观察者来处理UITextView的contentSize发生变化的事件:
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
,因为this post here。
因此每次contentSize更改时都会正确地重新计算高度,但我的问题是:如果我想让UITextView开始滚动5行,我该怎么做?