我有以下UITableviewCell布局,我使用autolayout来处理这个
=========
| Image | Name Label
| | Short description Label
=========
Description Label
此处描述标签是可选的,它将根据内容隐藏/显示,我正在使用
计算heightForRowAtIndexPath
上单元格的高度
- (CGFloat)heightForTableView:(UITableView *)tableView cell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
cell.bounds = CGRectMake(0, 0, CGRectGetWidth(tableView.bounds), CGRectGetHeight(cell.bounds));
[cell setNeedsLayout];
[cell layoutIfNeeded];
CGSize cellSize = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
// Add extra padding
CGFloat height = cellSize.height;// + 1;
return height;
}
即使我隐藏了隐藏描述标签,它也会为单元返回相同的高度,我缺少什么?
有人能建议使用自动布局处理此类方案的最佳方法吗?
编辑1 :设置空工作但是有更好的方法吗?
答案 0 :(得分:0)
对于所有行调用heightForRowAtIndexPath。对于您隐藏描述标签的行,对于同一行,您在heightForRowAtIndexPath方法中设置高度。
例如。 对于第4行,您要通过检查某些条件来隐藏描述标签。
而不是heightForRowAtIndexPath,您可以检查同一行的相同条件,并且可以返回不显示描述标签时所需的高度。
让我们说,
if(description.length==0)
{
return 100;// description label hidden
}
else
{
return 140;// description label shown
}
答案 1 :(得分:0)
我建议按如下方式计算每个细胞的高度。通过查看你的问题,我假设如果没有描述标签,所有单元格应该具有相同的高度,对吗?假设它是60.因此,您需要做的就是根据描述文本计算每个单元格的高度,并将其添加到没有描述文本的单元格高度。在您的heightForTableView
代表中会出现类似情况。
- (CGFloat)heightForTableView:(UITableView *)tableView cell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
int cellWidth = 320; // assuming it is 320
int constantHeight = 60;
NSString * str = [[yourarray objectAtIndex:indexPath.row] objectForKey:@"DescriptionKey"];
int height = [self calculateHeightForText:str withWidth:cellWidth andFont:[UIFont systemFontOfSize:16]];
// replace systemFontSize with your own font
return height + constantHeight;
}
// Depreciated in iOS7
- (int)calculateHeightForText:(NSString *)string withWidth:(int)width andFont:(UIFont *)font
{
CGSize textSize = [string sizeWithFont:font constrainedToSize:CGSizeMake(width, 20000) lineBreakMode: NSLineBreakByWordWrapping];
return ceil(textSize.height);
}
// Introduced in iOS7
- (int)calculateHeightForText:(NSString *)string withWidth:(int)width andFont:(UIFont *)font
{
int maxHeightForDescr = 1000;
NSDictionary *attributes = @{NSFontAttributeName: font};
CGRect rect = [string boundingRectWithSize:CGSizeMake(width, maxHeightForDescr)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:attributes
context:nil];
return rect.size.height;
}
我已经为calculateHeightForText编写了两个方法,一个在iOS7中折旧,适用于iOS6及更低版本和iOS7,但第二个是推荐的iOS7方法,但不适用于iOS7。如果您发现令人困惑的事情,或者需要任何进一步的帮助,请告诉我。很乐意进一步帮助。