动态管理标签文本无法正常工作

时间:2014-02-11 07:40:26

标签: ios iphone objective-c

CGFloat constrainedSize = 500.0f;

UIFont * myFont = [UIFont fontWithName:@"Arial" size:19]; //or any other font that matches what you will use in the UILabel
CGSize textSize = [myText sizeWithFont: myFont
                     constrainedToSize:CGSizeMake(constrainedSize, CGFLOAT_MAX)
                         lineBreakMode:NSLineBreakByWordWrapping];

lblDescription=[[UILabel alloc]initWithFrame:CGRectMake(10,y, 300,textSize.height)];

我已尝试过此代码来管理动态文本。但如果数据变大,则不会显示整个文本。

4 个答案:

答案 0 :(得分:1)

您将大小限制为宽度= 500pt,但您的文本字段仅为300pt宽。

编辑:

看来,我不清楚。如果使用sizeWithFont计算标签的高度并将约束宽度设置为500pt(constrainedSize)并使用计算出的高度,则在宽度仅为300pt的标签上,计算出的高度不正确。

这就是我的工作方式:

CGFloat constrainedSize = 300.0f;

UIFont * myFont = [UIFont fontWithName:@"Arial" size:19]; //or any other font that matches what you will use in the UILabel
CGSize textSize = [myText sizeWithFont: myFont
                     constrainedToSize:CGSizeMake(constrainedSize, CGFLOAT_MAX)
                         lineBreakMode:NSLineBreakByWordWrapping];

UILabel* lblDescription=[[UILabel alloc]initWithFrame:CGRectMake(10.0, 10.0, constrainedSize, textSize.height)];
lblDescription.lineBreakMode = NSLineBreakByWordWrapping;
lblDescription.numberOfLines = 0;
lblDescription.font = myFont;
lblDescription.text = myText;

再次:使用与用于计算的标签(font,size,lineBreakMode)相同的属性,否则它将不适合。

答案 1 :(得分:0)

那是因为你是分配并启动UILabel,并且永远不会为更大尺寸的文本重置它的框架。

只需在文字大小更改后设置UILabel的框架。

此行将标签的大小设置为textSize.height,并且不会更改。

        lblDescription=[[UILabel alloc]initWithFrame:CGRectMake(10,y, 300,textSize.height)];

您可以调用setFrame以编程方式更改此内容。

答案 2 :(得分:0)

要显示较大的文字/多行文字,您应该使用UITextView。它旨在解决这个问题。

答案 3 :(得分:0)

这里是用于在标签

中设置动态文本的代码
    CGSize maximumLabelSize = CGSizeMake(300,9999);
    CGSize expectedLabelSize = [label.text sizeWithFont:label.font
                                      constrainedToSize:maximumLabelSize
                                          lineBreakMode:label.lineBreakMode];

    CGRect newFrame = label.frame;
    newFrame.size.height = expectedLabelSize.height;
    label.frame = newFrame;

我希望这对你有帮助..