如何调整和使UILabel的宽度适合文本大小?

时间:2010-11-04 07:54:29

标签: iphone

在我的项目中,有UILabel个文字。字体大小为16pt。文本内容根据不同情况而变化。我希望它可以自动调整UILabel的宽度以适应文本的总宽度而不拉伸。

有可能吗?

8 个答案:

答案 0 :(得分:109)

这假设您已经设置了字体:

label.text = @"some text";
[label sizeToFit];

您还需要定义最大宽度,并告诉您的程序如果sizeToFit为您提供的宽度大于该最大值,该如何处理。

答案 1 :(得分:21)

以下是如何操作,假设以下messageLabel是您希望获得所需效果的标签。现在,尝试这些简单的代码行:

    // Set width constraint for label; it's actually the width of your UILabel
    CGFloat constrainedWidth = 240.0f;
    // Calculate space for the specified string
    CGSize sizeOfText = [yourText sizeWithFont:yourFont constrainedToSize:CGSizeMake(constrainedWidth, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap];
    UILabel *messageLabel = [[UILabel alloc] initWithFrame:CGRectMake(20,20,constrainedWidth,sizeOfText.height)];
    messageLabel.text = yourText;
    messageLabel.numberOfLines = 0;// This will make the label multiline

答案 2 :(得分:12)

NSString *txt1=@"I am here.";
CGSize stringsize1 = [txt1 sizeWithFont:[UIFont systemFontOfSize:14]]; 
[label setFrame:CGRectMake(x,y,stringsize1.width,hieght)];
[label setText:txt1];

答案 3 :(得分:7)

我在这里看到三个选项。

首先,使标签的大小足以容纳任何文本。这是最简单的,但并不总是运作良好 - 取决于其周围的观点。

其次,Label可以根据较长的文本(adjustsFontSizeToFitWidth属性)调整字体的大小。这通常是不可取的,元素中的不同字体可能看起来很难看。

最后一个选项是根据当前保留的文本以编程方式调整标签大小。要计算用当前字体保存文本所需的大小,请使用以下内容:

CGSize textSize = [[someLabel text] sizeWithFont:[someLabel font] forWidth:someLabel.bounds.size.width lineBreakMode:UILineBreakModeWordWrap];

答案 4 :(得分:2)

如果您已经设置了字体及其大小,并且已定义了框架,请尝试使用以下两种常见条件:

if (label.text.length > maxCharPerLine) [label setNumberOfLines:0]; // infinite lines
else [label setNumberOfLines:1]; // one line only

// Adjust your font size to fit your desired width.
[label setAdjustsFontSizeToFitWidth:YES];

答案 5 :(得分:1)

按照这个。

CGSize stringsize = [yourString sizeWithFont:[UIFont systemFontOfSize:fontSize]]; 
[label setFrame:CGRectMake(x,y,stringsize.width,height)];
[label setText: yourString];

答案 6 :(得分:1)

由于sizeWithFont在IOS 7.0中被折旧,因此您在代码

下面
#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)



 if (SYSTEM_VERSION_LESS_THAN(@"7.0")) {
        // code here for iOS 5.0,6.0 and so on
        CGSize fontSize = [itemCat_text sizeWithFont:[UIFont fontWithName:@"Helvetica" size:12]];
    } else {
        // code here for iOS 7.0
         fontSize = [itemCat_text sizeWithAttributes:
                           @{NSFontAttributeName:
                                 [UIFont fontWithName:@"Helvetica" size:12]}];
    }

答案 7 :(得分:1)

使用自动LayOut:

enter image description here

在ViewController上:

override func viewDidLoad() {
        super.viewDidLoad()

self.sampleLabel.text = "Electrical Maintenance and Repair"
            self.sampleLabel..sizeToFit()

}