我试图创建一个带有1个标签的tableviewCell,在点击它时展开它,再次点击它时再次对它进行collopase。现在我关于如何扩展单元格的动画是这样的:
CGFloat targetHeightOfCell = [c.textLabel sizeOfMultiLineLabel].height;
_expandedState.height = @(targetHeightOfCell);
CGFloat difference = targetHeightOfCell - DEFAULT_CELL_HEIGHT;
CGFloat targetHeightOfContent = self.tableView.contentSize.height + difference;
[self.tableView beginUpdates];
[self.tableView endUpdates];
[UIView animateWithDuration:0.3f
animations:^{
CGRect frame = self.tableView.frame;
frame.size.height = targetHeightOfContent;
self.tableView.frame = frame;
}
completion:^(BOOL finished) {
}];
并且在我的身高中,我的身高恢复正确的身高。单元格扩展但我对sizeOfMultiLineLabel的计算不正确。文本扩展但仍然不是所有文本都可见,因此它仍然附加...
这是我在UILabel上的类别:
- (CGSize)sizeOfMultiLineLabel {
NSAssert(self, @"UILabel was nil");
//Label text
NSString *aLabelTextString = [self text];
//Label font
UIFont *aLabelFont = [self font];
//Width of the Label
CGFloat aLabelSizeWidth = self.frame.size.width;
//Return the calculated size of the Label
CGSize size = [aLabelTextString boundingRectWithSize:CGSizeMake(aLabelSizeWidth, MAXFLOAT)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{
NSFontAttributeName : aLabelFont
}
context:nil].size;
//Check if the height isn't smaller then the default one
if(size.height < DEFAULT_HEIGHT){
return CGSizeMake(aLabelSizeWidth, DEFAULT_HEIGHT);
} else {
return size;
}
}
我想要的是文本有多长,标签必须展开才能让用户看到它。
答案 0 :(得分:0)
我认为您的标签已正确设置numberOfLines
。如果没有,您可能希望将其设置为0以确保它可以包含所需的行数。您还需要确保包装模式正确,例如UILineBreakModeWordWrap
。最后,根据您的单元格布局,标签可能会有边距 - 因此请确保在返回高度时考虑到这一点。