UILabel显示的线路数量少于预期

时间:2014-02-26 20:40:39

标签: ios objective-c user-interface uilabel

我希望我的UILabel以多行显示我的数据,并从txt文件中获取数据。 我在网上搜索了这个问题,所有答案显示我只需要将lineBreakMode设置为NSLineBreakByWordWrappingnumberOfLines = 0.但问题是,即使我添加了这些设置,标签显示的行数少于预期(我的数据有4行,但标签只显示2行)。这是我的代码:

-(void)updateFileContentLabel:(NSString*)content{

    self.fileContentLabel.text = content;
    self.fileContentLabel.lineBreakMode = NSLineBreakByWordWrapping;
    self.fileContentLabel.font = [UIFont systemFontOfSize:17.0f];
    self.fileContentLabel.numberOfLines = 0;
    [self.fileContentLabel sizeToFit];

    NSLog(@"file Label: %@",self.fileContentLabel.text);


}

如您所见,我有一个NSLog来显示标签文本的内容。 NSLog中的标签文本是正确的(4行)。但是在手机或模拟器上,它只显示2行而不是4行。有谁知道问题出在哪里?谢谢!

3 个答案:

答案 0 :(得分:0)

可能你的UILabel还不够大。解决方案:

1.增加label size

2.添加以下代码以允许UILabel在需要时减小字体大小。

self.fileContentLabel.minimumScaleFactor = 0.5;

答案 1 :(得分:0)

当我使用自动布局并且没有为fileContentLabel设置约束时,我只能复制你的问题,所以检查出来。

答案 2 :(得分:0)

使用以下方法计算文本高度并相应地设置标签框架。

 - (CGSize)boundingSizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode
 {
CGSize stringSize;

if ([self respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)]) {

    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    paragraphStyle.lineBreakMode = lineBreakMode;

    NSDictionary * stringAttributes = @{ NSFontAttributeName: font, paragraphStyle: NSParagraphStyleAttributeName};

    stringSize = [self boundingRectWithSize:size
                                    options:NSStringDrawingUsesLineFragmentOrigin
                                 attributes:stringAttributes context:nil].size;

    stringSize = CGSizeMake(ceil(stringSize.width), ceil(stringSize.height) + 2);

} else {

    stringSize = [self sizeWithFont:font constrainedToSize:size lineBreakMode:lineBreakMode];

}

return stringSize;
}