自定义个textView,重写下面2个func
外部调用只需要改变textView对应行的高度即可
//换行的时候会调用,而且多次,虽然也会调用setContentOffset,但是最后还是调用它
public override var contentOffset: CGPoint {
didSet {
if isContainChangecontentOffsetY {
if contentOffsetCallBack != nil {
super.contentOffset = contentOffsetCallBack!(contentOffset)
}
else {
let h = frame.size.height
//行高
let lineHeight = font?.lineHeight ?? 17
//行数
// let lineCount = Int((contentSize.height - textContainerInset.top - textContainerInset.bottom) / lineHeight)
// print(contentSize.height - h > lineHeight)
var offset = contentOffset
/* 1.当小于最大行数的时候,让textView内容居中显示,
偏移量就为(contentSize.height - h) / 2
2.大于最大行数,让textView底部稍微空出一点
偏移量contentSize.height - h + 2
*/
//contentSize.height - h > lineHeight(内容 - 高度 大于 1行的高度说明超过了最大的行数)
//lineCount <= maxLineCount
offset.y = contentSize.height - h < lineHeight ? (contentSize.height - h) / 2 : contentSize.height - h + 2
super.contentOffset = offset
}
}
else {
super.contentOffset = contentOffset
}
}
}
//当行数超过最大的行数的时候,每次改变输入的内容读会调用这个func,这个可不写
public override func setContentOffset(_ contentOffset: CGPoint, animated: Bool) {
super.setContentOffset(contentOffset, animated: animated)