IOS UITextView內(nèi)容垂直居中方法

感謝兩位@八條8tiao 和@SAW 兩位大神提醒,內(nèi)容又完善了下,加了下注釋。注釋內(nèi)容是自己理解的,如果有錯的地方,還請路過大神不吝賜教!

最近在做的項目中需要textView的文字內(nèi)容居中。以為很簡單,一句代碼或者在xib中簡單設(shè)置就可以搞定的事情,結(jié)果遠比想象中的難。網(wǎng)上找了好多方法,要么太復(fù)雜,要么根本不好使。結(jié)果找到這位大神的方法,簡單易用、效果還好,貼上來分享給大家:

textview默認(rèn)樣式.png
- (void)contentSizeToFit
{
    //先判斷一下有沒有文字(沒文字就沒必要設(shè)置居中了)
    if([self.textView.text length]>0)
    {
        //textView的contentSize屬性
        CGSize contentSize = self.textView.contentSize;
        //textView的內(nèi)邊距屬性
        UIEdgeInsets offset;
        CGSize newSize = contentSize;
        
        //如果文字內(nèi)容高度沒有超過textView的高度
        if(contentSize.height <= self.textView.frame.size.height)
        {
            //textView的高度減去文字高度除以2就是Y方向的偏移量,也就是textView的上內(nèi)邊距
            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循環(huán),設(shè)置textView的文字大小,使內(nèi)容不超過整個textView的高度(這個根據(jù)需要可以自己設(shè)置)
            while (contentSize.height > self.textView.frame.size.height)
            {
                [self.textView setFont:[UIFont fontWithName:@"Helvetica Neue" size:fontSize--]];
                contentSize = self.textView.contentSize;
            }
            newSize = contentSize;
        }
        
        //根據(jù)前面計算設(shè)置textView的ContentSize和Y方向偏移量
        [self.textView setContentSize:newSize];
        [self.textView setContentInset:offset];
        
    }
}

原理:由于textView是繼承自UIScrollview,所以會有ContentSize屬性。所以可以通過文字內(nèi)容的高度(也就是ContentSize)的高度和textView的高度之間的差值,設(shè)置內(nèi)邊距,就相當(dāng)于把內(nèi)容居中了。

調(diào)用方法后樣式.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,939評論 25 709
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補...
    _Yfling閱讀 14,118評論 1 92
  • 教你36穴保健康 百會穴∶(一提二暖三安神,百病須白百會尋) 太陽穴∶(瀉火醒腦祛頭疾,太陽高懸令目明) 四白穴∶...
    菡丹閱讀 570評論 0 1
  • 中國的飛人 完成國人 征服世界的夢想 12秒98 新的世界記錄 已伴隨著五星紅旗 在不斷唱響 陽光帥氣的臉龐 已成...
    莫邪干劍閱讀 231評論 0 0
  • 1、events(事件) 對于大多數(shù)的Node.js核心API采用的是異步事件驅(qū)動的架構(gòu),其中某些類型的對象(觸發(fā)...
    七_五閱讀 383評論 0 0

友情鏈接更多精彩內(nèi)容