欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

笔记:UITextView内容垂直居中方法

程序员文章站 2022-11-27 14:34:35
原理:由于textView是继承自UIScrollview,所以会有ContentSize属性。所以可以通过文字内容的高度(也就是ContentSize)的高度和textView的高度之间的差值,设置内边距,就相当于把内容居中了。 ......
- (void)contentsizetofit
{
    //先判断一下有没有文字(没文字就没必要设置居中了)
    if([self.textview.text length]>0)
    {
        //textview的contentsize属性
        cgsize contentsize = self.textview.contentsize;
        //textview的内边距属性
        uiedgeinsets offset;
        cgsize newsize = contentsize;
        
        //如果文字内容高度没有超过textview的高度
        if(contentsize.height <= self.textview.frame.size.height)
        {
            //textview的高度减去文字高度除以2就是y方向的偏移量,也就是textview的上内边距
            cgfloat offsety = (self.textview.frame.size.height - contentsize.height)/2;
            offset = uiedgeinsetsmake(offsety, 0, 0, 0);
        }
        else          //如果文字高度超出textview的高度
        {
            newsize = self.textview.frame.size;
            offset = uiedgeinsetszero;
            cgfloat fontsize = 18;

           //通过一个while循环,设置textview的文字大小,使内容不超过整个textview的高度(这个根据需要可以自己设置)
            while (contentsize.height > self.textview.frame.size.height)
            {
                [self.textview setfont:[uifont fontwithname:@"helvetica neue" size:fontsize--]];
                contentsize = self.textview.contentsize;
            }
            newsize = contentsize;
        }
        
        //根据前面计算设置textview的contentsize和y方向偏移量
        [self.textview setcontentsize:newsize];
        [self.textview setcontentinset:offset];
        
    }
}

原理:由于textview是继承自uiscrollview,所以会有contentsize属性。所以可以通过文字内容的高度(也就是contentsize)的高度和textview的高度之间的差值,设置内边距,就相当于把内容居中了。