当UITextView达到一定数量的行时开始滚动?迅速4

时间:2018-05-11 16:11:56

标签: ios swift uitextview inputaccessoryview

所以我正在创建一个消息传递应用,我有inputAccessoryView名为typingView,其中包含messageTextView: UITextViewsendButton: 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行,我该怎么做?

0 个答案:

没有答案