我正在尝试在uitableviewcell中更改UITextView高度,我在SO上搜索了很多,并且有很多答案,其中很多非常相似。我认为我找到的最佳答案是:
UITableViewCell with UITextView height in iOS 7?
我已经尝试过,但效果不好,这是我的代码:
- (CGFloat)textViewHeightForRowAtIndexPath: (NSIndexPath*)indexPath {
UITextView *calculationView = [self.textViews objectForKey: indexPath];
CGFloat textViewWidth;
if (!calculationView.attributedText) {
// This will be needed on load, when the text view is not inited yet
calculationView = [[UITextView alloc] init];
calculationView.attributedText = [[NSAttributedString alloc] initWithString:[[self.comments objectAtIndex:indexPath.row] valueForKey:@"comment"] attributes:self.regularDict];// get the text from your datasource add attributes and insert here
textViewWidth = 250; // Insert the width of your UITextViews or include calculations to set it accordingly
} else {
textViewWidth = calculationView.frame.size.width;
}
CGSize size = [calculationView sizeThatFits:CGSizeMake(textViewWidth, FLT_MAX)];
return size.height;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return [self textViewHeightForRowAtIndexPath:indexPath];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
CommentCell *cell = (CommentCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
NSAttributedString *text_user = [[NSAttributedString alloc] initWithString:[[self.comments objectAtIndex:indexPath.row] valueForKey:@"comment"] attributes:self.regularDict];
[cell.my_text setAttributedText:text_user];
[cell.my_text setTextAlignment:NSTextAlignmentRight];
CGRect frame = cell.my_text.frame;
CGSize size = [cell.my_text sizeThatFits:CGSizeMake(250, FLT_MAX)];
frame.size.height = size.height;
[cell.my_text setFrame:frame];
[self.textViews setObject:cell.my_text forKey:indexPath];
return cell;
}
但这是结果:
行中有很多空白空间,我无法理解为什么......
任何人都可以帮助我吗?
答案 0 :(得分:0)
有关您尝试实现的目标的更多信息会有所帮助,但是......
我认为您可能会发现tableView:heightForRowAtIndexPath:
在tableView:cellForRowAtIndexPath:
之前运行完成,因此任何更改UITextView
tableView:(UITableView *)tableView cellForRowAtIndexPath:
高度的代码都无效。
要清楚,所有行高都是在UITableView
填充该行内单元格内容之前设置的。
因此,在使用tableView:heightForRowAtIndexPath:
时,必须在此方法中的indexPath
处确定每个单元格的高度。
答案 1 :(得分:0)
我曾经遇到过这个问题,最后是因为我使用的字体不需要高度和#34; sizeThatFits"回。从那时起,我随时随地携带以下帮助方法:
- (CGFloat)heightOfTextViewWithString:(NSString *)string
withFont:(UIFont *)font
andFixedWidth:(CGFloat)fixedWidth
{
UITextView *tempTV = [[UITextView alloc]initWithFrame:CGRectMake(0, 0, fixedWidth, 1)];
tempTV.text = [string uppercaseString];
tempTV.font = font;
CGSize newSize = [tempTV sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)];
CGRect newFrame = tempTV.frame;
newFrame.size = CGSizeMake(fmaxf(newSize.width, fixedWidth), newSize.height);
tempTV.frame = newFrame;
return tempTV.frame.size.height;
}