2015-07-10 56 views
0

我想按比例缩放一个UILabel究竟是如何执行。我有一个插入文本的文本框。点击完成后,文本框将会显示并且标签的文本被设置。我想在文本大于屏幕宽度时插入多行,并截断标签的框架以使文本适合。UILabel文本多行给定文本的宽度

这里是我的代码

if(isCaption){ 
    //Begin Edit Text 
    _textlabel.hidden = NO; 
    _textlabel.text = currentText; 
    _textFieldOutlet.hidden = YES; 
    [_textFieldOutlet setTextAlignment:NSTextAlignmentLeft]; 
    [_textlabel setTextAlignment:NSTextAlignmentLeft]; 
    [self.screenShotView bringSubviewToFront:_textlabel]; 

    _textlabel.frame = CGRectMake(10, 
            _textlabel.frame.origin.y, 
            [currentText sizeWithAttributes:@{NSFontAttributeName:[_textlabel font]}].width, 
            [currentText sizeWithAttributes:@{NSFontAttributeName:[_textlabel font]}].height); 


    isEditing = YES; 
    isCaption = NO; 


} 

的问题是,结果是一个巨大的文本行,我想它传播的多。这如何实现?如何分开给定宽度的线?

回答

2

如果你想多行,你不应该用sizeWithAttributes计算你的宽度。您应该修复标签的宽度,然后使用boundingRectWithSize:方法计算高度。

如下您可以创建一个辅助方法:

- (CGSize)suggestedSizeWithFont:(UIFont *)font size:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode forString:(NSString *)text { 
     NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new]; 
     paragraphStyle.lineBreakMode = lineBreakMode; 
     NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:text attributes:@{NSFontAttributeName: font,  NSParagraphStyleAttributeName: paragraphStyle}]; 
     CGRect bounds = [attributedString boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin context:nil]; 
     return bounds.size; 
} 

或者你可以创建一个类别,并摆脱额外的文本参数。

然后,你可以调用方法对您标签的文本如下:

CGSize requiredSize = [self suggestedSizeWithFont:_textLabel.font size:CGSizeMake(self.view.frame.size.width, CGFLOAT_MAX) lineBreakMode:_textLabel.lineBreakMode forString:_textLabel.text]; 
_textLabel.frame = CGRectMake(0, _textlabel.frame.origin.y, requiredSize.width, requiredSize.height); 

您可以设置任何你想要的标签,以适应宽度高度将相应计算。但记得将numberOfLines设置为0.

0

尝试插入的代码下面一行:

_textLabel.numberOfLines = 0; 
+0

doesen't解决它 –

+0

看看我的新答案。 – Jaycee