我希望我的UILabel
以多行显示我的数据,并从txt文件中获取数据。
我在网上搜索了这个问题,所有答案显示我只需要将lineBreakMode
设置为NSLineBreakByWordWrapping
并numberOfLines
= 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行。有谁知道问题出在哪里?谢谢!
答案 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;
}