最近一個(gè)新的需求關(guān)于使用UITextView,加在cell上然后隨著你輸入的文字換行后cell的高度發(fā)生變化,下邊首先來(lái)說(shuō)下整體思路
首先確認(rèn)UITextViw什么時(shí)候換行,有兩種換行,一種是自動(dòng)換行,但是你獲取不到換行符號(hào),所以無(wú)法確認(rèn)它在什么時(shí)候會(huì)換行,另外一種就是你按下?lián)Q行按鈕“\n”換行
獲取到換行的狀態(tài)后就需要你動(dòng)態(tài)改變下cell的高度以及UItextview的高度
-
如何計(jì)算什么時(shí)候換行,我們根據(jù)你輸入文字的字號(hào)大小和UITextView的輸入內(nèi)容來(lái)動(dòng)態(tài)計(jì)算其高度代碼如下:
/** * 自適應(yīng)字體 */ -(CGSize)sizeWithString:(NSString*)string font:(UIFont*)font width:(float)width { CGRect rect = [string boundingRectWithSize:CGSizeMake(width, 80000) options:NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesFontLeading |NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:font} context:nil]; return rect.size; } 然后需要在UITextFielDelegate代理方法里邊隨著你輸入的文字進(jìn)行修改代碼如下:
-(void)textViewDidChange:(UITextView *)textView{
//獲取文本中字體的size
CGSize size = [self sizeWithString:textView.text font:QianBaoFont(F3_14) width:textView.width];
NSLog(@"height = %f",size.height);
//獲取一行的高度
CGSize size1 = [self sizeWithString:@"Hello" font:QianBaoFont(F3_14) width:textView.width];
NSInteger i = size.height/size1.height;
if (i==1) {
//設(shè)置全局的變量存儲(chǔ)數(shù)字如果換行就改變這個(gè)全局變量
self.number = i;
}
if (self.number!=i) {
self.number = i;
NSLog(@"selfnum = %ld",self.number);
self.textView.height = size.height;
[self.tableView reloadRowsAtIndexPaths:@[self.indexPahth] withRowAnimation:(UITableViewRowAnimationAutomatic)];
}
}