我编写了以下代码,以使UITextView的高度符合其文本。
当我点击键盘上的输入键添加换行符时,尺寸会发生变化,但相对于第一行文字的上边距会相互不同。
import UIKit
class ViewController: UIViewController, UITextViewDelegate {
lazy var textView: UITextView = {
let tv = UITextView(frame: CGRectMake(20, 200, (self.view.frame.width - 40), 0) )
tv.backgroundColor = UIColor.lightGrayColor()
return tv
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview( textView )
textView.delegate = self
let height = self.height(textView)
let frame = CGRectMake(textView.frame.origin.x, textView.frame.origin.y, textView.frame.width, height)
textView.frame = frame
}
func textViewDidChange(textView: UITextView) {
let frame = CGRect(x: textView.frame.origin.x, y: textView.frame.origin.y, width: textView.frame.width, height: height(textView) )
textView.frame = frame
}
func height(textView: UITextView) -> CGFloat {
let size = CGSizeMake(textView.frame.size.width, CGFloat.max)
let height = textView.sizeThatFits(size).height
return height
}
}
我尝试了很少的其他方法来适应UITextView的高度,但他们只是采取了相同的说法。
答案 0 :(得分:1)
要解决此问题,请将UITextView子类化并覆盖setContentOffset,以便仅在内容高度大于内在内容高度时才允许滚动。类似的东西:
override func setContentOffset(_ contentOffset: CGPoint, animated: Bool) {
let allowScrolling = (contentSize.height > intrinsicContentSize.height)
if allowScrolling {
super.setContentOffset(contentOffset, animated: animated)
}
}
对于自动增长的动态高度文本视图,插入符号会在开始新行时移动。此时,文本视图的大小尚未增长到新的大小。文本视图尝试通过滚动不必要的文本内容来使插入符可见。
您可能还需要覆盖intrinsicContentSize。