IOS UITextView内容垂直居中方法

感谢两位@八条8tiao 和@SAW 两位大神提醒,内容又完善了下,加了下注释。注释内容是自己理解的,如果有错的地方,还请路过大神不吝赐教!

最近在做的项目中需要textView的文字内容居中。以为很简单,一句代码或者在xib中简单设置就可以搞定的事情,结果远比想象中的难。网上找了好多方法,要么太复杂,要么根本不好使。结果找到这位大神的方法,简单易用、效果还好,贴上来分享给大家:

textview默认样式.png
- (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的高度之间的差值,设置内边距,就相当于把内容居中了。

调用方法后样式.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,012评论 25 709
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,690评论 1 92
  • 教你36穴保健康 百会穴∶(一提二暖三安神,百病须白百会寻) 太阳穴∶(泻火醒脑祛头疾,太阳高悬令目明) 四白穴∶...
    菡丹阅读 3,517评论 0 1
  • 中国的飞人 完成国人 征服世界的梦想 12秒98 新的世界记录 已伴随着五星红旗 在不断唱响 阳光帅气的脸庞 已成...
    莫邪干剑阅读 1,531评论 0 0
  • 1、events(事件) 对于大多数的Node.js核心API采用的是异步事件驱动的架构,其中某些类型的对象(触发...
    七_五阅读 2,720评论 0 0

友情链接更多精彩内容