展开所有文本都可以容纳的标签(UITableViewCell)

时间:2015-04-21 06:39:25

标签: ios objective-c uitableview

我试图创建一个带有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;
    }
}

我想要的是文本有多长,标签必须展开才能让用户看到它。

1 个答案:

答案 0 :(得分:0)

我认为您的标签已正确设置numberOfLines。如果没有,您可能希望将其设置为0以确保它可以包含所需的行数。您还需要确保包装模式正确,例如UILineBreakModeWordWrap。最后,根据您的单元格布局,标签可能会有边距 - 因此请确保在返回高度时考虑到这一点。