我有tableView,其中包含自定义单元格(带有textView的单元格),我想根据文本大小调整其中的一些单元格。我使用以下代码片段执行此操作:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
//Load text in NSString which you want in Cell's LabelText.
NSString *cellText;
cell.Text = someData
//define font for Labeltext...
UIFont *cellFont = [UIFont fontWithName:@"Georgia" size:19.0];
CGSize constraintSize = CGSizeMake(330.0f, MAXFLOAT);
CGSize labelSize_val = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:NSLineBreakByWordWrapping];
return labelSize_val.height + 20;
}
此代码在某些情况下正常工作(红色方块 - 单元格空间):
但是对于较大的文本,它无法正常工作(使用空格来制作更大的单元格):
有任何想法如何解决这个问题?
答案 0 :(得分:0)
我已经习惯了,对我来说很好。
if (SYSTEM_VERSION_LESS_THAN(@"7.0")) {
// code here for iOS 5.0,6.0 and so on
CGSize fontSize = [text sizeWithFont:[UIFont fontWithName:@"Helvetica" size:17]];
size = fontSize;
}
else {
// code here for iOS 7.0
NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
[UIFont fontWithName:@"Helvetica" size:17], NSFontAttributeName,
nil];
CGRect fontSizeFor7 = [text boundingRectWithSize:CGSizeMake(571, 500)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:attributesDictionary
context:nil];
size = fontSizeFor7.size;
}
return size.height +20 ;
答案 1 :(得分:0)
首先,你必须覆盖在Indexpath处的行的高度,并通过函数“
计算你的字符串 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
NSString *cellText;
cellTextHeight = [self heightOfCellForText:cellText];
return cellTextHeight+margin;
}
-(CGFloat)heightOfCellForText:(NSString *)yourString
{
CGRect r = [yourString boundingRectWithSize:CGSizeMake(100.0, 0)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName:[UIFont fontWithName:@"Arial" size:15]} context:nil];
CGSize size=r.size;
CGFloat height=size.height;
return height;
}
我希望这段代码有助于感染。