啰嗦几句:
这里主要是通过NSString的sizeWithFont:constrainedToSize:lineBreakMode:方法实现。
该方法用于计算显示完整内容所需要的最小尺寸。
下面是摘抄的说明
NSString的函数sizeWithFont:constrainedToSize:lineBreakMode:
API文档解释:若字符串以规定的约束条件进行描绘,则返回实际的大小。
用途:返回以指定字体进行描绘时,字符串所占据的实际大小。
API文档解释:若字符串以规定的约束条件进行描绘,则返回实际的大小。
用途:返回以指定字体进行描绘时,字符串所占据的实际大小。
运行效果:
程序解析:
该部分主要摘抄自《UITableView高度自適應》,稍稍做了改动。
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString * CellIdentifier = @"MessageViewControllerCell"; int row = [indexPath row]; UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { // 用何種字體進行顯示 UIFont *font = [UIFont systemFontOfSize:14]; // 該行要顯示的內容 NSString *content = [_arr objectAtIndex:row]; // 实例化单元格对象 cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; // 设置显示文字 cell.textLabel.text = content; // 設置自動換行(重要) cell.textLabel.numberOfLines = 0; // 設置顯示字體(一定要和之前計算時使用字體一至) cell.textLabel.font = font; } return cell; }
- (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { int row = [indexPath row]; // 列寬 CGFloat contentWidth = self.tv.frame.size.width; // 用何種字體進行顯示 UIFont *font = [UIFont systemFontOfSize:14]; // 該行要顯示的內容 NSString *content = [_arr objectAtIndex:row]; // 計算出顯示完內容需要的最小尺寸 CGSize size = [content sizeWithFont:font constrainedToSize:CGSizeMake(contentWidth, 1000.0f) lineBreakMode:UILineBreakModeWordWrap]; // 這裏返回需要的高度 return size.height+20; }
参考链接:
IOS开发之常用系统函数收集:http://fulerbakesi.iteye.com/blog/1592224
UITableView高度自適應:http://mrjeye.iteye.com/blog/1045785
代码打包: