textView换行切换居中显示

自定义个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)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,179评论 25 708
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,510评论 0 17
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,891评论 18 139
  • 这一次重返加纳,我已经习惯也接受了在非洲的日子不是一次旅行,而是真切的生活。 今晚,又到了每三五天一次的全国断电。...
    畅语路阅读 553评论 0 3
  • 我(陈一舟)的理解就是:凡是没有独特优势和variant perception的事,就不做;凡是对本职工作没有太大...
    guoery阅读 482评论 0 50