我正在尝试使用XCode 4.2
创建一个Twitter客户端。 (iOS version 5
。)我希望我的应用程序的主时间轴看起来与Twitter iOS应用程序的时间轴类似:
我正在使用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;
}
然而,这就是我的应用程序最终看起来像:
问题是:
1)每个细胞似乎与整个表中最高的细胞具有相同的高度,而不是具有不同的高度。
2)因此,单元格顶部边框与文本之间的空间对于每个单元格都不同(因为iOS
垂直居中文本)。
我正在学习iOS
开发并且无法做这么简单的事情,即使经过大量的研究并花费了很多时间,似乎真的令人沮丧。非常感谢任何帮助。
(如果我提供的信息不够,这里是包含整个项目的ZIP文件:https://db.tt/m5suxWCj)
答案 0 :(得分:2)
您的问题是您的标签尚未创建,因为tableView:heightForRowAtIndexPath:
最初是在tableView:cellForRowAtIndexPath:
之前调用的,这是您创建单元格的位置。在tableView:heightForRowAtIndexPath:
中,您应该尽可能有效地确定单元格的高度,而不涉及UIViews。
为实现此目的,您应将NSString
存储在表格视图数据源的其他位置,并根据该值计算expectedLabelSize
。
另请注意,IOS 7中不推荐使用sizeWithFont:
,因此对于IOS 7及更高版本,您应该使用sizeWithAttributes:
代替。