在网上看到有人如此实现动态调整高度:点击。不至于为了获取高度创建一个不需要的cell。
主要有两个地方需要调整高度,一个是自己创建的UILabel或其它,另一个就是cell的高度。在创建cell的地方只需要定义好label的属性就行了:
- - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
- {
- static NSString *cellIdentifier = @"cell";
- UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
- if (cell == nil)
- {
- cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:cellIdentifier] autorelease];
- UILabel *contentLabel = [[UILabel alloc] initWithFrame:CGRectZero];
- [contentLabel setLineBreakMode:UILineBreakModeWordWrap];
- [contentLabel setNumberOfLines:0];
- [contentLabel setFont:FONT_CELL];
- [contentLabel setTag:TAG_LABEL];
- [[cell contentView] addSubview:contentLabel];
- [contentLabel release];
- }
设置完值后再设置frame:
- cell.textLabel.text = @"";
- CGSize captionSize = [cell.textLabel.text sizeWithFont:FONT_CELL];
- contentLabel.frame = CGRectMake(captionSize.width + 10, 0,
- CGRectGetWidth(cell.bounds) - captionSize.width - 10,
- [self tableView:nil heightForRowAtIndexPath:[NSIndexPath indexPathForRow:indexPath.row inSection:0]]);
- -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
- if (indexPath.row < …) {
- return 90;
- } else if (indexPath.row == ...) {
- NSString *caption = @"";
- CGSize contentSize = getTextSize(caption, FONT_CELL, @"data",
- CGRectGetWidth(self.tableView.bounds));
- return contentSize.height > 44 ? contentSize.height : 44;
- }
- return 44;
- }
- CGSize getTextSize(NSString *offsetText,UIFont *font,NSString *text, CGFloat maxWidth){
- CGSize offsetTextSize = [offsetText sizeWithFont:font];
- CGSize textSize = [text sizeWithFont:font
- constrainedToSize:CGSizeMake(maxWidth-offsetTextSize.width, MAXFLOAT)
- lineBreakMode:UILineBreakModeWordWrap];
- return textSize;
- }