2014-03-24 36 views
1

我有一个UILabel几行。文字是动态设置的,而我的标签高度也与这个本地方法:使用sizeToFit与lineSpacing

[myLabel sizeToFit]; 

我有一个设定的行间距在我的标签的另一种方法:

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"My long dynamic text"]; 
    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; 
    [paragraphStyle setLineSpacing:5]; 
    [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [labelText length])]; 


myLabel.attributedText = attributedString; 

的问题是,即使如果我先设置行间距,然后致电sizeToFit,则标签的新高度会很小。它不需要计算行间距。

这真的是一个问题,因为我的标签在UIScrollView,我需要正确的身高。

+0

可能重复的[UILabel的sizeToFit/sizeThatFits忽略numberoflines性质](http://stackoverflow.com/questions/5041874/ uilabels-sizetofit-sizethatfits-ignore-the-numberoflines-property) –

+0

不,我的numberOfLines属性不会被忽略。它被设置为0并且完美地工作。我在这里谈论线高度,线间距,以及你想要的方式。 –

回答

1

为了得到标签的大小动态地基于文本的长度使用这种方法:

/*! Returns the size of the label to display the text provided 
    @param text 
     The string to be displayed 
    @param width 
     The width required for displaying the string 
    @param fontName 
     The font name for the label 
    @param fontSize 
     The font size for the label 
*/ 
- (CGSize)getSizeForText:(NSString *)text maxWidth:(CGFloat)width font:(NSString *)fontName fontSize:(float)fontSize { 
    CGSize constraintSize; 
    constraintSize.height = MAXFLOAT; 
    constraintSize.width = width; 
    NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys: 
              [UIFont fontWithName:fontName size:fontSize], NSFontAttributeName, 
              nil]; 

    CGRect frame = [text boundingRectWithSize:constraintSize 
             options:NSStringDrawingUsesLineFragmentOrigin 
            attributes:attributesDictionary 
             context:nil]; 

    CGSize stringSize = frame.size; 
    return stringSize; 
} 
+2

我想这是最好的答案......但我很失望sizeToFit不会计入属性。这对我没有任何意义。 –

0

尝试使用– boundingRectWithSize:options:context:方法NSMutableAttributedString。请参阅Apple Docs了解更多信息。