iOS8中的多行/动态UILabel截断

时间:2014-09-28 20:19:51

标签: ios objective-c uitableview uilabel ios8

我在“动态”UITableViewCell中使用带有numberOfLines=0lineBreakMode = NSLineBreakByWordWrapping的UILabel。我利用AutoLayout将标签贴在顶部,底部,尾部和前缘的容器单元中。在iOS7中,标签的高度随其内容动态更新,但在iOS8中它会过早地截断(通常在1行,但有时在2行)。在iOS8中,我已经确认标签的intrinsicContentSize是按预期动态更新的,但标签的框架并不适用。以下是iOS7和iOS8之间的区别:

我已经阅读过iOS8中的类似错误,但无法实现变通方法。我已尝试将标签的文字设置为@""并返回@"Abraham Lincoln: Vampire Hunter"(如上所述in this question),但这并未解决问题。另请注意,在iOS8中,单元格大小确实会根据标签的intrinsicContentSize而增加,但无论出于何种原因,标签本身的高度都不会增加。任何建议将不胜感激。我很乐意提供更多信息。

iOS 8 iOS 7 Example Image

iOS 7 iOS 8 Example Image

1 个答案:

答案 0 :(得分:3)

这是我的走动 UILabel的子类,并覆盖此函数。

-(CGRect)textRectForBounds:(CGRect)bounds
    limitedToNumberOfLines:(NSInteger)numberOfLines
{
    CGRect rect = [super textRectForBounds:bounds
                    limitedToNumberOfLines:numberOfLines];

    float height = rect.size.height;
    int hightRound = (int)roundf(height);
    rect.size.height = hightRound;
    return rect;
}