UILabel中的大小和线条问题

时间:2014-08-13 12:01:29

标签: ios objective-c uilabel

我有一个小问题。我开发了一个自动填充从SQLite数据库获取的数据集的应用程序。这些数据是从动态方式绘制的,在数据​​之间我有一个框架,我动态插入标签。我从来不知道这些框架内标签的确切数量,因为我从数据库的不同表中获取数据。我对标签的问题是,标签中的文本没有填写标签的宽度。我尝试使用label.linebreakmode但仍然可以休息。我发布了代码:

我从之前的代码中获取了许多对象,例如widthFormatowidthImageFormato

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];

        }

2 个答案:

答案 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);

你必须用:

更新labelY
labelY = 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];