感謝兩位@八條8tiao 和@SAW 兩位大神提醒鹦付,內(nèi)容又完善了下,加了下注釋。注釋內(nèi)容是自己理解的坚踩,如果有錯的地方墓阀,還請路過大神不吝賜教毡惜!
最近在做的項目中需要textView的文字內(nèi)容居中。以為很簡單斯撮,一句代碼或者在xib中簡單設(shè)置就可以搞定的事情经伙,結(jié)果遠(yuǎn)比想象中的難。網(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