美文网首页
textView换行切换居中显示

textView换行切换居中显示

作者: 小傑 | 来源:发表于2017-11-16 11:15 被阅读37次

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

    相关文章

      网友评论

          本文标题:textView换行切换居中显示

          本文链接:https://www.haomeiwen.com/subject/wvclvxtx.html