如何在ios中为不同的自定义ui表格视图单元格设置不同的高度? 我试图改变高度取决于我的uitextview中有多少行,这是在我的自定义uitableview单元格内。
我尝试在我的heightForRowAtIndexPath方法中设置这样的高度,但它崩溃了:
PostStreamCell *cell = [tableView cellForRowAtIndexPath:indexPath];
int lines = cell.txtViewMessage.contentSize.height / cell.txtViewMessage.font.lineHeight;
if(lines < 4)
{
return 100;
}
else if(lines == 4)
{
return 100;
}
else{
return 220;
}
答案 0 :(得分:1)
您无法在cellForRowAtIndexPath
中使用heightForRowAtIndexPath
,因为该单元格不存在。您必须通过其他方式检索文本而不使用单元格。
答案 1 :(得分:0)
尝试使用text boundingRectWithSize..
计算单元格本身的大小。
这样的事情:
NSString *text = yourTextView.text;
CGSize size;
NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
[UIFont fontWithName:@"Helvetica Neue" size:19], NSFontAttributeName,
nil];
CGRect fontSizeFor7 = [text boundingRectWithSize:CGSizeMake(525, 500)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:attributesDictionary
context:nil];
size = fontSizeFor7.size;
return size.height +40;
答案 2 :(得分:0)
我建议你数数 int行 在 viewDidLoad中 使用文本字段长度的方法。然后将它存储在某个数组中并在其中使用它的值 heightForRowAtIndexPath 方法。看起来应该是这样的
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (myLinesArray[indexPath.row] =< 4)
{
return 100;
}
else return 220;
}
答案 3 :(得分:-1)
您正在正确设置高度 - 但是,您可能无法通过调用heightForRowAtIndexPath
来检索cellForRowAtIndexPath
中的单元格,除非您的单元格已经静态创建。 heightForRowAtIndexPath
(下面)的简单实现不会崩溃,因此问题可能在视图控制器实现的其他地方或其他地方。
还注意到您要除以动态值以获得高度。检查PostStreamCell - 如果单元格对象txtViewMessage
或其font
属性为零,那么您将除以0,这可能导致崩溃。
//Very simple implementation to demo changes in height - (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.row % 2) { return 60; } else { return 44; } }