2014-09-28 68 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