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