如何根据iOS中的文本长度更改UILabel宽度?

时间:2014-10-14 10:09:37

标签: ios objective-c iphone uikit uilabel

我想在' UILabel'旁边显示图像,但是' UILabel'文字长度可变,因此我不知道放置图像的位置。

图像应根据标签的大小移动。

我该如何做到这一点?

4 个答案:

答案 0 :(得分:5)

虽然Keshav的答案可行,但已被弃用

尝试:

NSDictionary *attributes = @{NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue" size:14]};

CGRect rect = [textToMeasure boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX)
                                          options:NSStringDrawingUsesLineFragmentOrigin
                                       attributes:attributes
                                          context:nil];

然后使用rect的大小来确定您的定位和标签尺寸。

CGRect currentLabelFrame = self.label.frame;

currentLabelFrame.size.width = rect.size.width;

self.label.frame = currentLabelFrame;

答案 1 :(得分:4)

使用自动布局,您可以执行以下操作:

  1. 将numberOfLines属性设置为0
  2. 设置UILabel的宽度约束(单击标签,右下角有一个图标,两行之间有一个框(Pin))
  3. 选择约束并编辑宽度约束的尺寸检验器(右上角,倒数第二个图标)中的值,并将常量'='更改为'> ='

答案 2 :(得分:1)

我有同样的问题,我想在自动布局的故事板中执行此操作,而不是在代码中。所以我制作了以下应用来测试这个概念。

enter image description here

我为"变量文字标签添加了Auto Layout constraints"和图像。我将标签固定在容器的左边缘(但我没有设置宽度的任何约束)。然后我将图像固定在标签的右边缘。 (我还在容器和#34中添加了约束"垂直中心;对于标签和图像都添加了约束。)

当我以编程方式更改标签文本时,图像会自动更改其位置并保留在标签旁边。

这是我使用的简单代码。 (对不起,它在Swift中,而不是客观-C.)

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var textField: UITextField!
    @IBOutlet weak var myLabel: UILabel!

    @IBAction func button(sender: AnyObject) {
        myLabel.text = textField.text
    }
}

对于其他查看此问题并且不知道如何添加约束的人(不久前就像我一样),here是我的另一个答案。

答案 3 :(得分:0)

您可以使用以下代码:

label.numberOfLines = 0;
CGRect frame = label.frame;
labelSize = [@"message" sizeWithFont:font constrainedToSize:CGSizeMake(frame.size.width, MAXFLOAT) lineBreakMode:UILineBreakModeWordWrap];
frame.size = labelSize;
label.frame = frame;