`
auauau
  • 浏览: 168145 次
社区版块
存档分类
最新评论

UILabel (UITableViewCell的动态高度)

    博客分类:
  • iOS
阅读更多
原文: http://hi.baidu.com/redefine/blog/item/1bad04c3291b4c39e4dd3be1.html



做一个普通iPhone程序,以一个twitter客户端为例,最花时间的UI部分可能就是UITableView了,而其中最重要的部分是则是UITableViewCell。

以UITableViewCellStyleValue2为例,可以用左侧的Label来显示用户名,右侧的Label显示推的内容。那么接下来要处理的问题就是怎么样来控制单元格高度来完美显示长度不同的推。

左侧的Label叫做textLabel,只要简单的用一个语句加载用户名即可:

cell.textLabel.text = @"ztpala";

右侧的Label为detailTextLabel:

cell.detailTextLabel.text = @"这是一条很长很长很长很长很长很长很长的推"

如果仅使用这两条语句,显示结果就会是下面那样:

????        ztpala  这是一条很长很长很...

如果要显示完整的推,关键部分有两个:

1. 让detailTextLabel可以合适的换行

2. 调整单元格的大小从而可以完全显示detailTextLabel

cell.detailTextLabel.lineBreakMode = UILineBreakModeWordWrap; //如何换行

cell.detailTextLabel.numberOfLines = 0; //这个值设置为0可以让UILabel动态的显示需要的行数。

调整单元格的高度则比较复杂,需要小心计算,步骤如下:

1. 首先要确定一条消息所占的宽度,这个一般都是固定的,然后根据这个宽度来计算一段文字在这个宽度,某个字体下需要多少高度

UIFont *font = [UIFont systemFontOfSize:17.0] //先确定使用的字体,因为字体不同占用的空间也不相同

//假设someString代表消息,labelWidth代表某个固定宽度, 1000是个虚数只是为了创造一个能完全放下这些文字的空间

CGSize size = [someString sizeWithFont:font constrainedToSize:CGSizeMake(labelWidth, 1000) lineBreakMode:UILineBreakModeWordWrap];

//size即返回的完全显示消息实际需要的空间

2. 确定单元格高度。最关键的长度不一的消息所需的高度已经确定,下面只要加上上所需固定空间即可以确定单元格高度,完整代码

- (CGFloat)tableView:(UITableView *)atableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

{     

UIFont *font = [UIFont systemFontOfSize:17.0]

CGSize size = [someString sizeWithFont:font constrainedToSize:CGSizeMake(labelWidth, 1000) lineBreakMode:UILineBreakModeWordWrap];

return size.height+10; // 10即消息上下的空间,可自由调整

}



总体来说很简单,但当你需要自己格式化单元格显示的时候,整个处理还是比较繁杂。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics