在iOS应用程序中动态调整表格单元格大小

时间:2014-01-20 20:50:53

标签: ios objective-c uitableview

我正在尝试使用XCode 4.2创建一个Twitter客户端。 (iOS version 5。)我希望我的应用程序的主时间轴看起来与Twitter iOS应用程序的时间轴类似:

Twitter's UI

我正在使用UITableView一个包含标签和三个按钮的原型单元格。下面是我用来设置高度的代码:

            - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
            {
                static NSString* cellIdentifier = @"TweetContainerCell";
                UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
                @try {
                    UILabel* tweetLabel;
                    if(cell != nil) {
                        tweetLabel = (UILabel*)[cell.contentView viewWithTag:1];
                        NSString* tweetText = tweetLabel.text;
                        CGSize expectedLabelSize = [tweetText sizeWithFont:[UIFont fontWithName:tweetLabel.font.fontName size:20] constrainedToSize:CGSizeMake(CGFLOAT_MIN, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap];
                        //[tweetLabel setFrame:CGRectMake(tweetLabel.frame.origin.x, tweetLabel.frame.origin.y, cell.frame.size.width, expectedLabelSize.height)];
                        //[cell.textLabel setFrame:tweetLabel.bounds];
                        //[tweetLabel sizeToFit];
                        //[cell setFrame:CGRectMake(cell.frame.origin.x, cell.frame.origin.y, cell.frame.size.width, expectedLabelSize.height)];
                        //[cell sizeToFit];
                        NSLog(@"Font size: %f", expectedLabelSize.height);
                        return (expectedLabelSize.height * 2);
                    }
                }
                /* Imgur URL: http://i.imgur.com/lHnsAsP.png */
                /* http://i.imgur.com/hA9EKfI.png */
                @catch (NSException* exception) {
                    NSLog(@"Exception: %@", exception);
                }
                return 0;
            }

然而,这就是我的应用程序最终看起来像:

My application

问题是:

1)每个细胞似乎与整个表中最高的细胞具有相同的高度,而不是具有不同的高度。

2)因此,单元格顶部边框与文本之间的空间对于每个单元格都不同(因为iOS垂直居中文本)。

我正在学习iOS开发并且无法做这么简单的事情,即使经过大量的研究并花费了很多时间,似乎真的令人沮丧。非常感谢任何帮助。

(如果我提供的信息不够,这里是包含整个项目的ZIP文件:https://db.tt/m5suxWCj

1 个答案:

答案 0 :(得分:2)

您的问题是您的标签尚未创建,因为tableView:heightForRowAtIndexPath:最初是在tableView:cellForRowAtIndexPath:之前调用的,这是您创建单元格的位置。在tableView:heightForRowAtIndexPath:中,您应该尽可能有效地确定单元格的高度,而不涉及UIViews。

为实现此目的,您应将NSString存储在表格视图数据源的其他位置,并根据该值计算expectedLabelSize

另请注意,IOS 7中不推荐使用sizeWithFont:,因此对于IOS 7及更高版本,您应该使用sizeWithAttributes:代替。