2014-09-28 60 views
4

截断我在“动态”的UITableViewCell使用UILabels与numberOfLines=0lineBreakMode = NSLineBreakByWordWrapping。我利用AutoLayout将标签附加到其顶部,底部,尾部和前缘的容器单元。在iOS7中,标签的高度随其内容动态更新,但在iOS8中,它会过早截断(通常在1行,但有时在2处)。在iOS8中,我已经确认标签的intrinsicContentSize按预期动态更新,但标签的框架不符合要求。这里是iOS7和iOS8上看到之间的区别:多行/动态的UILabel在iOS8上

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

的iOS 8 iOS 7 Example Image

的iOS 7 iOS 8 Example Image

+0

你好@gsheld,你有没有想办法解决这个问题?我一直在搜索SO。大多数答案表示在layoutSubviews方法中使用标签宽度设置标签preferredMaxLayoutWidth。但是,它根本不工作。 :-( – 2015-06-13 21:40:04

回答

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; 
} 
+0

请勿使用圆形(高度),使用ceilf(高度),否则您的标签仍有50%的机会被截断。 – 2015-10-20 09:39:06