UITableview单元格正在返回与其文本无关的高度。
我一直在处理一个相当恼人的错误,其中xcode为单元格返回不正确的高度,并且通常只是单元格中非常不一致的元素的返回像素高度。
我认为我可以实施以下方法来清理事情,但事实证明它们只会让事情变得更糟。
google doc中的第一个图像就是我使用这些方法时单元格的样子。请告诉我你必须解决的任何想法。问题的关键是我在谷歌文档的第二张图片中展示的一个特例。
特殊情况背后的原因以及对其发生原因的深入讨论是在谷歌文档中。这是google doc链接: https://docs.google.com/document/d/1tT43nE-1Wq8leRIaoQ29S0aQhZUWP88kIX3WlG_RcOg/edit?usp=sharing
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section==0) { //postcell
return 500.0; //TODO add some autolayout stuff for this case...
} else { //comment cell
UIFont * font=[UIFont fontWithName:@"Helvetica Neue" size:13.0];
NSIndexPath *adjustedIndexPath = [NSIndexPath indexPathForRow:indexPath.row inSection:indexPath.section-1];
BRComment *comment = [self.commentsController objectAtIndexPath:adjustedIndexPath];
CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
//CommentCell * commentCell=(CommentCell *)[self.tableView cellForRowAtIndexPath:indexPath];
CGSize labelHeight = [self heigtForCellwithString:comment.body andLabelWidth:screenWidth-78.0 withFont:font];
return labelHeight.height; // the return height + your other view height
}
}
-(CGSize)heigtForCellwithString:(NSString *)stringValue andLabelWidth:(CGFloat)labelWidth withFont:(UIFont *)font{
CGSize constraint = CGSizeMake(labelWidth,9999); // Replace 300 with your label width //TODO replace
NSDictionary *attributes = @{NSFontAttributeName: font};
CGRect rect = [stringValue boundingRectWithSize:constraint
options: (NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
attributes:attributes
context:nil];
return rect.size;
}
答案 0 :(得分:0)
iOS 8向UITableViewAutomaticDimension
引入了超级便捷的UITableView
const。要自动调整单元格大小,只需从UITableViewAutomaticDimension
和-tableView:heightForRowAtIndexPath:
返回-tableView:estimatedHeightForRowAtIndexPath:
。
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewAutomaticDimension;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewAutomaticDimension;
}
Voila,你的细胞大小应该正确。请注意,如果您需要使用这些内容,还会考虑单元格layoutMargins
和indentationWidth
/ indentationLevel
。