我正在使用分组的uitableview。我有很多部分。在第一部分中只有一个 UITableViewCell。在这个单元格中,我将显示一个文本。
问题是我不知道文本的字符数,我想更改单元格的高度以显示整个文本。
有人能帮我吗?谢谢
我正在使用分组的uitableview。我有很多部分。在第一部分中只有一个 UITableViewCell。在这个单元格中,我将显示一个文本。
问题是我不知道文本的字符数,我想更改单元格的高度以显示整个文本。
有人能帮我吗?谢谢
在 UItableViewDelegate 方法中 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 您可以返回特定行的高度。为此,您必须知道要在该行中显示的字符串的长度。看到这个链接Get tableView:heightForRowAtIndexPath: 发生在 tableView:cellForRowAtIndexPath:?
您将不得不使用heightForRowAtIndexPath
. 在此范围内,您将必须执行您在单元格中layoutsubviews
或单元格中所做的所有计算cellForRowAtIndexPath
。为此,您必须弄清楚文本的长度。cellForRowAtIindexPath
无论如何,您都必须访问文本。那么你为什么不知道文本会有多长呢?
要确定实际文本的大小,您可以使用 NSSTring 的sizeWithFont:forWidth:lineBreakMode:
.
我已经解决了应用下面的代码并创建属性numberOfTextRows的问题。
(CGFloat)tableView:(UITableView *)t heightForRowAtIndexPath:(NSIndexPath *)indexPath
float height = 45.0f;
if (indexPath.section == 0 && indexPath.row == 0) {
CGSize theSize = [self.strResult sizeWithFont:[UIFont systemFontOfSize:12.0f] constrainedToSize:CGSizeMake(265.0f, 9999.0f) lineBreakMode:UILineBreakModeWordWrap];
self.numberOfTextRows = round(theSize.height / 12);
if ((indexPath.section == height) || (self.numberOfTextRows < 2)) {
height = 45;
} else {
height = theSize.height + 16;
}
}
return height;
(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
cell.textLabel.numberOfLines = self.numberOfTextRows;