我有一个小问题。我开发了一个自动填充从SQLite数据库获取的数据集的应用程序。这些数据是从动态方式绘制的,在数据之间我有一个框架,我动态插入标签。我从来不知道这些框架内标签的确切数量,因为我从数据库的不同表中获取数据。我对标签的问题是,标签中的文本没有填写标签的宽度。我尝试使用label.linebreakmode
但仍然可以休息。我发布了代码:
我从之前的代码中获取了许多对象,例如widthFormato
和widthImageFormato
if([tipoVino length]!=0){
UILabel *lblFormato = [[UILabel alloc] init];
labelX = ((widthFormato-widthImageFormatos) / 2)+10;
CGRect labelFrame = lblFormato.frame;
labelFrame.size.width = widthImageFormatos;
labelFrame.origin.x = labelX;
labelFrame.origin.y = labelY+25;
lblFormato.frame = labelFrame;
lblFormato.numberOfLines = 0;
lblFormato.lineBreakMode = NSLineBreakByWordWrapping;
[lblFormato setText:[NSString stringWithFormat:@"- %@",tipoVino]];
lblFormato.textColor = [UIColor whiteColor];
labelY = lblFormato.frame.origin.y;
[formatosImageView addSubview:lblFormato];
}
答案 0 :(得分:1)
我认为您想要创建具有灵活高度的标签(并非所有标签都具有相同的尺寸),并且必须修复formatosImageView的宽度。
为iOS7编辑
我使用的是在iOS7中弃用的sizeWithFont,我将其更改为boundingRectWithSize
试试这个:
UILabel *lblFormato = [[UILabel alloc] init];
lblFormato.numberOfLines = 0;
lblFormato.lineBreakMode = NSLineBreakByWordWrapping;
[lblFormato sizeToFit];
NSString *string = [NSString stringWithFormat:@"- %@", tipoVino];
[lblFormato setText: string];
//Calculate the size of the container of the lblFormato
CGSize size = [string boundingRectWithSize:CGSizeMake(widthImageFormatos, 2000) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: [UIFont fontWithName:@"customFont" size:fontSize]} context:nil];
lblFormato.frame = CGRectMake(labelX, labelY + 25, size.width, size.height);
你必须用:
更新labelYlabelY = lblFormato.frame.size.height;
也许它可以帮到你。
答案 1 :(得分:0)
关于@spinillos回答,对于iOS 7:
NSDictionary *attributes = @{ NSFontAttributeName : [UIFont systemFontOfSize:<#fontSize#>] };
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc]
initWithString: <#string#>,
attributes:attributes];
CGRect frame = [attributedString boundingRectWithSize:CGSizeMake(<#width#>, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin context:nil];