PlugInBoy
PlugInBoy

Reputation: 989

Problems with sizes and lines in UILabel

I have a little question. I developed an application that automatically fills a data set obtained from a SQLite database. These data are drawn from dynamic way, and between the data I have a frame where I insert labels dynamically. I never know the exact number of labels inside these frame because I take data from different tables of my Database. The problem I have with the labels which texts within them do not fill within the width of the label. I tried to use label.linebreakmode but still makes the break. I post the code:

There I have many objects taken from previous code, like widthFormato and 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];

        }

Upvotes: 0

Views: 80

Answers (2)

spinillos
spinillos

Reputation: 92

I think that you want to create labels with flexible height (not all have the same size), and must fix the width of formatosImageView.

EDITED FOR iOS7

I was using sizeWithFont that is deprecated in iOS7, I changed it for boundingRectWithSize

Try this:

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

and you must update the labelY with:

labelY = lblFormato.frame.size.height;

Maybe it helps you.

Upvotes: 1

Nick
Nick

Reputation: 949

With regards @spinillos answer, for 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];

Upvotes: 0

Related Questions