1

我有UILabel几行。文本是动态设置的,我的标签高度也是动态设置的,使用这个原生方法:

[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,我的标签的新高度也太小了。它不考虑行距。

这确实是一个问题,因为我的标签在 a 中UIScrollView,我需要合适的高度。

4

2 回答 2

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;
}
于 2014-03-26T08:19:18.500 回答
0

尝试– boundingRectWithSize:options:context:使用NSMutableAttributedString. 有关更多信息,请参阅Apple 文档

于 2014-03-24T11:48:12.227 回答